Я бил головой о эту крошечную программу, которую я написал, чтобы проверить некоторые алгоритмы завершения матрицы. Я считаю, что я могу переполнить буфер, но мне больше всего любопытно, почему весь буфер поврежден. СпасибоЗначения мусора после определенного количества записей
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 является 100000 и baseNum составляет 80000
Выхода из первых два couts правильно, третье значение мусора после загрузки последних 20000 рейтингов фильмов. Каждый MovieRating 16 байт.
Еще раз спасибо
Кроме того, я почти забыл это на системе Linux 64-битным.
вау .. не могу поверить, что я пропустил, что один. Большое вам спасибо, просто исправил ors для ands, и он отлично работал. Что касается sizeof (base), правильно ли мне сохранить его, как это было, поскольку все, что я в основном делаю, это убедиться, что я не пишу за пределами массива? Еще раз спасибо! –
oh nevermind Я понимаю, что вы сейчас говорите, провела несколько тестов, чтобы объяснить это себе. Спасибо –