删除 char 数组时 C++ 堆损坏

标签 c++ arrays char heap-memory heap-corruption

为什么在尝试删除 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 &
返回的地址调用deletenew [] 返回的地址调用 delete []

关于删除 char 数组时 C++ 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564503/

相关文章:

php - 比较两个数组并创建一个真/假值的关联数组

javascript - 对 JS 数组执行测试以查看它是否包含另一个值数组

c++ - 跟踪实例化模板类型 C++

c++ - 使用指针算法时内存泄漏

c++ - 我收到错误 'List::showList' : function-style initializer appears to be a function definition' on a function in my cpp file

haskell - 如何返回在Haskell中包裹的给定字母的字母表中的下一个字母

java - 为什么我输入的某些部分没有被相应的字符替换?

c++ - 错误 C2039 : 'type_name' : is not a member of of 'swig::traits<Bar>'

c++ - 在 C++ 中处理数组的问题

c - 使用变量将元素输入到 char 数组中