2013-04-04 29 views
0

運行以下代碼時出現的錯誤是「Debug As thesis Failed ... Expression _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)」。當在C中使用char *時出現「調試斷言失敗」錯誤

我的readTXT方法需要傳遞一個char *對象,但我想讓用戶選擇爲自己輸入值。

char * mapName; 
int main() 
    { 
     //load map 
     int mapSelection; 
     cout << "select a map"; 
     cin >> mapSelection; 

     switch (mapSelection) 
     { 
     case 1: 
      mapName = "walls1.txt"; 
      break; 
     case 2: 
      mapName = "walls2.txt"; 
      break; 
     case 3: 
      mapName = "maze1.txt"; 
      break; 
     case 4: 
      mapName = "maze2.txt"; 
      break; 
     } 

     map = readTXT(mapName, 8, 11); 
     delete mapName; 
    ... 

這是readTXT方法

double* readTXT(char *fileName, int sizeR, int sizeC) 
{ 
    double* data = new double[sizeR*sizeC]; 
    int i=0; 
    ifstream myfile (fileName); 
    if (myfile.is_open()) 
    { 

    while (myfile.good()) 
    { 
     if (i>sizeR*sizeC-1) break; 
     myfile >> *(data+i); 
     cout << *(data+i) << ' '; // This line display the converted data on the screen, you may comment it out. 
     if (i == 10 || i == 21 || i == 32 || i == 43 || i == 54 || i == 65 || i == 76) 
     { 
      cout << "\n"; 
     } 
     i++; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 
    //cout << i; 

    return data; 
} 
+5

不要'刪除'你沒有'新'的內存。 – chris 2013-04-04 18:05:48

回答

1

你不應該這樣做代碼:

delete mapName; 

因爲mapName來自一個字符串常量。只有您用new分配的delete內存。

字符串常量被內置到您的程序中,並且不需要被刪除。當你使用char*來引用一個時,你並沒有製作副本,所以這不會引入任何刪除的需要。

+0

不幸的是仍然得到相同的錯誤。 – user1566446 2013-04-04 18:21:02

1

不要刪除你還沒有從new了內存:

delete mapName; 

刪除上述行。

+0

不幸的是仍然得到相同的錯誤。 – user1566446 2013-04-04 18:23:10

+1

你可能在''''代碼中有其他類似的東西,你沒有告訴我們。 – 2013-04-04 18:26:40