簡體   English   中英

STD Bad Alloc異常

[英]STD Bad Alloc exception

該程序嚴格只讀取字母,並按原樣推回向量。 但是,該文本文件與其他任何文本文件一樣。

我遇到了此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部分時,它工作正常。 為什么會這樣呢? 我在這里做錯了什么?

您的問題是以下5行:

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

索引超出keyArray數組邊界的keyArray 它可能已經覆蓋了paddedVector對象中的內部指針。 反過來,當向量嘗試(重新)分配內存時,您會收到此異常,因為delete[]無法理解該地址的來源。


請注意,出於同樣的原因,你開始從你的第一個指數0 ,你也應該從開始你的第二個指標0 因此,兩個索引都應在[0, 5)范圍內。

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

上面的內容超出了數組的末尾。 keyArray有效索引是keyArray[0..4][0..4] 您的程序處於未定義的行為狀態。

您在錯誤地尋址內部數組。 它們也是基於0的,因此格式應為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM