当在C中使用char *时出现“调试断言失败”错误
运行以下代码时出现的错误是“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;
}
你不应该这样做代码:
delete mapName;
因为mapName
来自一个字符串常量。只有您用new
分配的delete
内存。
字符串常量被内置到您的程序中,并且不需要被删除。当你使用char*
来引用一个时,你并没有制作副本,所以这不会引入任何删除的需要。
不幸的是仍然得到相同的错误。 – user1566446 2013-04-04 18:21:02
不要删除你还没有从new
了内存:
delete mapName;
删除上述行。
不幸的是仍然得到相同的错误。 – user1566446 2013-04-04 18:23:10
你可能在''''代码中有其他类似的东西,你没有告诉我们。 – 2013-04-04 18:26:40
不要'删除'你没有'新'的内存。 – chris 2013-04-04 18:05:48