在一定数量的条目之后的垃圾值
Garbage values after a certain amount of entries
本文关键字:之后 更新时间:2023-10-16
我一直在绞尽脑汁地研究我写的这个小程序,只是为了测试一些矩阵补全算法。我相信我可能会溢出缓冲区,但我最好奇的是为什么整个缓冲区会损坏。谢谢你
MovieRating base[baseNum];
MovieRating test[NUM_RATINGS - baseNum];
//load the base data set
string line ="";
ifstream baseF("assets/u1.base");
ifstream testF("assets/u1.test");
if(baseF.fail()){
cout << "Unable to open File. Program Terminating..."<<endl;
return 1;
}
int i = 0;
getline(baseF, line);
while(baseF || i < sizeof(base)){
base[i] = StringToRating(line);
i++;
getline(baseF,line);
}
cout << base[15000].mId << " " << base[15000].uId << " " << base[15000].rating << " " << base[15000].timestamp << endl;
baseF.close();
cout << base[15000].rating << endl;
//load testing dataset
if(testF.fail()){
cout << "Unable to open File. Program Terminating..."<<endl;
return 1;
}
i = 0;
getline(testF, line);
while(testF || i < sizeof(test)){
test[i] = StringToRating(line);
i++;
getline(testF,line);
}
testF.close();
cout << base[15000].rating << endl;
GlobalMeanValue(base, test);
return 0;
NUM_RATINGS为100,000,baseNum为80,000
前两个计数的输出是正确的,第三个计数是加载了最近20,000个电影评分后的垃圾值。
再次表示感谢我差点忘了这是在64位linux系统上
你的问题是双重的,在这一行while(baseF || i < sizeof(base)){
:
首先,你的意思是使用&&
而不是||
,这样一旦输入用完,你就完成了。
第二,sizeof(base)
是数组的总大小,而不是元素的个数,sizeof(base) / sizeof(base[0])
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 在类定义之后定义一个私有方法
- 在循环C++中指定字符串之后,不会打印该字符串
- C++宏忽略之后的内容
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- strncpy之后的char数组的错误行为
- 计算十进制 c++ 之后的数字
- "x += x--"之后的 x 是什么?
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- execlp() 在 fork() 之后无法正常工作
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 如何在MISRA C++之后实施CRTP
- 在 OpenCV 的 namedWindow 之前或之后初始化 Tesseract
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- 了解在返回值之前和之后使用 EAX 的函数调用
- 在 C++20 之前和之后初始化 std::atomic