2013-04-15 31 views
0

該程序嚴格只讀取字母,並將其推回到向量中。 但是,文本文件就像任何其他文本文件。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部分時,它工作正常。爲什麼這樣?我在這裏做錯了什麼?

+2

文件的大小是多少? – Shahbaz

+0

@Shahbaz,僅限1kb。 :( – Andres

+1

有趣的是,你的代碼在這裏工作得很好,你在爲我們隱藏什麼?:) –

回答

3

你的問題有以下5條線:

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

你在哪裏索引你的keyArray數組的邊界。它可能會覆蓋paddedVector對象中的內部指針。當矢量試圖(重新)分配內存時,你會得到這個異常,因爲delete[]無法理解該地址來自哪裏。


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

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

上述寫入超過數組的末尾。 keyArray的有效索引是keyArray[0..4][0..4]。你的程序處於未定義的行爲狀態。

1

您錯誤地處理了內部數組。它們也是基於0的,所以格式應該是

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