c++ - STD Bad Alloc 异常

标签 c++ vector bad-alloc

该程序严格只读取字母表,并按原样返回 vector 。 但是,该文本文件与任何其他文本文件一样。

我遇到过这个 STD bad 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 部分时,它工作正常。为什么会这样?我在这里做错了什么?

最佳答案

您的问题是以下 5 行:

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

索引超出keyArray 数组边界的位置。它可能覆盖了 paddedVector 对象中的内部指针。反过来,当 vector 尝试(重新)分配内存时,您会收到此异常,因为 delete[] 无法理解该地址的来源。


请注意,出于同样的原因,您从 0 开始您的第一个索引,您也应该从 0 开始您的第二个索引!因此,两个索引都应在 [0, 5) 范围内。

关于c++ - STD Bad Alloc 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16016051/

相关文章:

c++ - linux 上的运算符 new 和 bad_alloc

c++ - 为什么我在使用 getline() 时遇到问题? "No instance of overloaded functions matches the argument list"和 "data is ambiguous"

c++ - 如何从两个数组中生成一对 vector ,然后使用 CUDA/Thrust 按该对的第一个元素排序?

c++ - 有哪些好的做法可以帮助防止 unordered_maps 和 vector 中的 std::bad_alloc?

r - 将误差线添加到条形图中

c++ - 填充指向 vector 元素的指针的无序队列

c++ - 如何导致bad_alloc

c++ - 有没有办法计算出#defined 术语?

c++ - 由于 while 循环中的条件而导致段错误

c++ - 构造函数不能使用 make_shared<T>()