在C中使用char *时出现错误“debug assertion failed”

时间:2013-04-04 18:05:03

标签: c++ char heap

运行以下代码时出现的错误是“Debug Assertation Failed ... Expression _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)”。

我的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;
}

2 个答案:

答案 0 :(得分:1)

你不应该这样做:

delete mapName;

因为mapName来自字符串常量。仅使用delete分配的new内存。

字符串常量内置于程序中,不需要删除。当你使用char*来引用一个时,你没有复制,所以这并不需要删除。

答案 1 :(得分:1)

请勿删除您未从new获取的内存:

delete mapName;

删除上述行。