这个程序严格只读取字母,然后按原样推回矢量。 但是文本文件就像任何其他文本文件一样。
我遇到过这个STD错误的alloc异常,如下所示。
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 :(得分:3)
您的问题有以下5行:
keyArray[?][5] = '?';
您要从keyArray
数组的边界开始索引。它可能覆盖了paddedVector
对象中的内部指针。反过来,当向量尝试(重新)分配内存时,您会收到此异常,因为delete[]
无法理解该地址的来源。
请注意,出于同样的原因,您从0
开始了第一个索引,您还应该从0
开始第二个索引!因此,两个指数都应在[0, 5)
范围内。
答案 1 :(得分:1)
char keyArray[5][5];
// ...
keyArray[4][5] = 'z';
以上写入超出数组的末尾。 keyArray
的有效索引为keyArray[0..4][0..4]
。您的程序处于未定义的行为状态。
答案 2 :(得分:1)
您正在错误地寻址内部数组。它们也是0,所以格式应该是
keyArray[0][0] = 'a'
.
.
.
keyArray[4][4] = 'z'