为什么在尝试删除 char 数组时会出现堆损坏。
下面的代码在“main()”中
case 'r':
char *StrTReverse = new char;
std::cout << "Enter a string: " << std::endl;
std::cin >> StrTReverse;
std::cout << "String reversed: " << ReverseString(StrTReverse) << std::endl;
system("pause");
delete[] StrTReverse; <- Here the is the crash
break;
下面是ReverseString函数
char* ReverseString(char string[])
{
int StringLength = std::strlen(string);
char *NewString = new char[StringLength];
for (int i = 0, j = StringLength-1; i < StringLength;i++,j--)
{
NewString[i] = string[j];
}
NewString[StringLength] = '\0';
return NewString;
};
我不明白为什么会发生这种情况。我是 C++ 新手,所以请记住这一点。 感谢您的帮助:)
最佳答案
char *StrTReverse = new char;
您没有分配数组,因此不要调用delete[]
调用delete
替换
delete[] StrTReverse;
与
delete StrTReverse;
规则是对 new
&
返回的地址调用delete
对 new []
返回的地址调用 delete []
。
关于删除 char 数组时 C++ 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564503/