我正在尝试学习和理解VC ++中的调试堆损坏。
我在MSDN(https://msdn.microsoft.com/en-us/library/windows/hardware/ff543097(v=vs.85).aspx)上找到了漂亮的艺术品。
有人可以提供示例代码来重现堆损坏问题。 所以我可以按照msdn文章中提到的步骤进行操作。
答案 0 :(得分:2)
这应该腐败堆:
char *cp = new char[10];
(*(cp - 5))++;
这应该破坏分配的内存块前面的标题。如果你查看编译器创建的头文件的结构,它还应该让你知道如何创建特定类型的损坏的头数据。
您可能希望尝试禁用优化,因为这是未定义的行为,优化器可能会使用UB代码执行一些有趣的操作。如有疑问,请在调试器中检查编译器或机器代码反汇编的汇编输出,以查看生成的代码。