У меня возникла проблема при запуске кода ниже. Каждый раз, когда я устанавливаю время цикла для достижения .eof() возвращает зЬй :: bad_allocПочему я получаю ошибку std :: bad_alloc
inFile.open(fileName, std::ios::in | std::ios::binary);
if (inFile.is_open())
{
while (!inFile.eof())
{
read(inFile, readIn);
vecMenu.push_back(readIn);
menu.push_back(readIn);
//count++;
}
std::cout << "File was loaded succesfully..." << std::endl;
inFile.close();
}
Он работает отлично, если я установил заранее заданное число итераций, но терпит неудачу, когда я использую EOF Funtion. Вот код для функции чтения:
void read(std::fstream& file, std::string& str)
{
if (file.is_open())
{
unsigned len;
char *buf = nullptr;
file.read(reinterpret_cast<char *>(&len), sizeof(unsigned));
buf = new char[len + 1];
file.read(buf, len);
buf[len] = '\0';
str = buf;
std::cout << "Test: " << str << std::endl;
delete[] buf;
}
else
{
std::cout << "File was not accessible" << std::endl;
}
}
Любая помощь, которую вы можете предоставить, очень ценится. Примечание: Я не упомянул, что vecMenu имеет тип станд :: вектор и меню типа станд :: Список
Пожалуйста, смотрите этот пост: [? Почему iostream :: ВФ внутри условия цикла считается неправильным] (http://stackoverflow.com/questions/ 5605125/why-is-iostreameof-inside-a-loop-condition-accepted-wrong) – Rakete1111
Спасибо @ Rakete1111 – Akatosh
Кроме того, вызов распределителя для каждой отдельной строки, которую вы читаете, замедляет вашу программу. Лучше использовать нелокальный 'std :: vector' и вызывать' resize() 'вызов, чем вызывать' new/delete' вызовы каждый раз. – PaulMcKenzie