一定数量的条目后的垃圾值

时间:2013-06-10 15:08:02

标签: c++

我一直在抨击我为编写一些矩阵完成算法而编写的这个小程序。我相信我可能会溢出缓冲区,但我很好奇为什么整个缓冲区都被破坏了。 谢谢

    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

前两个couts的输出是正确的,第三个是加载最后20,000个电影评级后的垃圾值。每个MovieRating是16个字节。

再次感谢

此外,我几乎忘记了这是在64位Linux系统上。

1 个答案:

答案 0 :(得分:2)

你的问题是双重的,并且在这一行while(baseF || i < sizeof(base)){

首先,您的意思是使用&&代替||,这样一旦输入用完,您就完成了。

其次,sizeof(base)是数组的总大小,而不是sizeof(base) / sizeof(base[0])所拥有的元素数