【问题标题】:STD Bad Alloc exceptionSTD 错误分配异常
【发布时间】:2013-04-15 13:11:40
【问题描述】:

这个程序严格地只读取字母,并按原样推回向量。 但是,文本文件就像任何其他文本文件一样。

我遇到过这个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
    }
}

请多多指教。

EDIT 当我拿走 keyArray 部分时,它工作正常。为什么会这样?我在这里做错了什么?

【问题讨论】:

  • 文件大小是多少?
  • @Shahbaz,仅 1kb。 :(
  • 有趣的是,您的代码在这里运行良好。你在为我们隐瞒什么? :)
  • 哈哈,正如@WouterHuysentruit 所说,您的代码中还有其他内容您没有向我们展示。
  • 又犯了一个愚蠢的错误,谢谢大家指出这一点。叹息。

标签: c++ vector bad-alloc


【解决方案1】:

您的问题是以下 5 行:

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

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


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

【讨论】:

    【解决方案2】:
    char keyArray[5][5];
    // ...
    keyArray[4][5] = 'z';
    

    上面的写入超出了数组的末尾。 keyArray 的有效索引是 keyArray[0..4][0..4]。您的程序处于未定义的行为状态。

    【讨论】:

      【解决方案3】:

      您对内部数组的寻址不正确。它们也是基于 0 的,所以格式应该是

      keyArray[0][0] = 'a'
      .
      .
      .
      keyArray[4][4] = 'z'
      

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2022-12-07
        • 2015-07-26
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        相关资源
        最近更新 更多