2013-05-17 1 views
0

Получение ошибки времени выполнения, которая говорит: «завершить вызов после запуска экземпляра« std :: bad_alloc ».» Не уверен, что с ним, я довольно новичок в C++.Ошибка выполнения с файлом io и векторами (C++)

do 
    { 
     getline(in_stream, tempstr1); 
     itemNumb.push_back(tempstr1); 
     getline(in_stream, tempstr2); 
     itemNumb.push_back(tempstr2); 
     in_stream >> tempdoub; 
     itemCost.push_back(tempdoub); 
     in_stream >> tempint; 
     itemQuant.push_back(tempint); 
     index++; 
    } while (! in_stream.eof()); 
    in_stream.close(); 

Edit: Я должен был уточнить, itemNumb и ITEMNAME струнных векторов, itemCost является двойным вектором, itemQuant представляет собой целое число вектора. tempstr1 и 2 - строки, tempdoub - это double, а tempint - целое число.

+0

какой тип tempstr1-2? Говорит ли что-нибудь еще? – gpicchiarelli

+1

строки слишком длинны ... – fasked

ответ

0

Петля потенциально бесконечна, если какая-либо операция ввода завершилась неудачно, и это не вызвано достижением конца файла, что в конечном итоге приведет к исчерпанию памяти.

Например:

in_stream >> tempdoub; 

, вероятно, чтение в double. Если это не удается, поток будет помещен в плохое состояние (устанавливается failbit), и последующие чтения не будут иметь эффекта, и конец файла никогда не будет достигнут. Немедленно проверьте результат операций ввода:

while (getline(in_stream, tempstr1) 
     && getline(in_stream, tempstr2) 
     && in_stream >> tempdoub 
     && in_stream >> tempint) 
{ 
    itemNumb.push_back(tempstr1); 
    itemNumb.push_back(tempstr2); 
    itemCost.push_back(tempdoub); 
    itemQuant.push_back(tempint); 
    index++; 
} 
+0

Я изменил его таким образом, теперь он ничего не может сделать, поэтому я уверен, что in_stream >> tempdoub и in_stream >> tempint не работают. Как я могу это исправить? –