我一直在猛烈抨击我为测试一些矩阵完成算法而编写的这个小程序。我相信我可能会溢出缓冲区,但我主要好奇为什么整个缓冲区会损坏。谢谢你
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
前两个 cout 的输出是正确的,第三个是加载最后 20,000 个电影评级后的垃圾值。每个 MovieRating 是 16 个字节。
再次感谢
另外我差点忘了这是在 64 位 linux 系统上。