STD Bad Alloc исключение

Эта программа строго читает только алфавиты и возвращает обратно к вектору.
Однако текстовый файл такой же, как и любой другой текстовый файл.

Я столкнулся с этим недопустимым исключением STD и заключается в следующем.

char keyArray[5][5];

keyArray[0][1] = 'a';
keyArray[0][2] = 'b';
keyArray[0][3] = 'c';
keyArray[0][4] = 'd';
keyArray[0][5] = 'e';
keyArray[1][1] = 'f';
keyArray[1][2] = 'g';
keyArray[1][3] = 'h';
keyArray[1][4] = 'i';
keyArray[1][5] = 'k';
keyArray[2][1] = 'l';
keyArray[2][2] = 'm';
keyArray[2][3] = 'n';
keyArray[2][4] = 'o';
keyArray[2][5] = 'p';
keyArray[3][1] = 'q';
keyArray[3][2] = 'r';
keyArray[3][3] = 's';
keyArray[3][4] = 't';
keyArray[3][5] = 'u';
keyArray[4][1] = 'v';
keyArray[4][2] = 'w';
keyArray[4][3] = 'x';
keyArray[4][4] = 'y';
keyArray[4][5] = 'z';ifstream readFile;
vector<char> paddedVector;
char c;
int number_of_chars = 0;
readFile.open ("test.txt", ifstream::in);
while(  !readFile.eof() )
{
if(readFile.peek() == -1)
break;
c = readFile.get();
if(!isalpha(c))
continue;

if(c != '\n') //bad alloc here
{
++number_of_chars;
paddedVector.push_back(c); //std bad alloc happens here
}
}

Пожалуйста, советуйте.

РЕДАКТИРОВАТЬ Когда я забрал часть keyArray, она работает нормально. почему это так? что я здесь делаю неправильно?

0

Решение

Ваша проблема в следующих 5 строках:

keyArray[?][5] = '?';

где вы индексируете границы вашего keyArray массив. Возможно, он перезаписал внутренний указатель в paddedVector объект. В свою очередь, когда вектор пытается (пере) распределить память, вы получаете это исключение, потому что delete[] не могу понять, откуда пришел этот адрес.


Обратите внимание, что по той же причине вы начали свой первый индекс с 0, вы также должны начать свой второй индекс с 0! Поэтому оба показателя должны находиться в диапазоне [0, 5),

3

Другие решения

char keyArray[5][5];
// ...
keyArray[4][5] = 'z';

Выше записывает за конец массива. Допустимые индексы для keyArray являются keyArray[0..4][0..4], Ваша программа находится в неопределенной зоне поведения.

1

Вы неправильно обращаетесь к внутренним массивам. Они также основаны на 0, поэтому формат должен быть

keyArray[0][0] = 'a'
.
.
.
keyArray[4][4] = 'z'
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector