c++ - 堆损坏 : What could the cause be?

标签 c++ memory-management

我正在调查由于堆损坏而导致的崩溃。由于这个问题很重要并且涉及分析堆栈和转储结果,因此我决定对与崩溃相关的文件进行代码审查。

坦率地说,我对堆何时可能损坏没有深入的了解。

如果您能提出可能导致堆损坏的方案,我将不胜感激。

平台:Windows XP

语言:C++

编译器:VC6

最佳答案

常见的场景包括:

  • 在数组的分配空间之外写入(char *stuff = new char[10]; stuff[10] = 3;)
  • 转换为错误的类型
  • 未初始化的指针
  • -> 和 .
  • 的拼写错误
  • 使用 * 和 &(或两者的倍数)时出现拼写错误

[编辑] 从评论中,还有一些:

  • 将 new [] 和 new 与 delete [] 和 delete 混合使用
  • 复制构造函数丢失或不正确
  • 指向垃圾的指针
  • 对同一数据多次调用 delete
  • 没有虚析构函数的多态基类

关于c++ - 堆损坏 : What could the cause be?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504251/

相关文章:

ios - 不了解潜在的泄漏

c++ - 如何在 C++ 中定义常量?

c++ - 编译器在 std::move 和 deleted 复制构造函数方面的行为不同

c++ - 在 C++ 类继承中使用函数

c++ - 如何使用 call 和 alloca 指令在 llvm 字节码中定位类名?

c++ - std::atomic 是否有可能使类的复杂成员函数成为原子?

c++ - 在 C++ 中正确使用堆栈和堆?

ios - CFString(不可变)内存使用在 IOS 应用程序中不断增长

C#:释放内存使用

c++ - 只有当 len < 3 时,我才会收到堆损坏错误。怎么会?