释放内存时获得"Heap Corruption Detected: after Normal block"

Getting "Heap Corruption Detected: after Normal block" when freeing memory

本文关键字:Detected after block Normal Corruption Heap 内存 释放      更新时间:2023-10-16

我只是想通过以下代码测试内存分配和删除:

char* t = new char[20]();
char* t2 = t + 22;
*t2 = 0x01;
printf("I am heren");
delete[] t;

首先,at "char* t2 = t + 22;"我知道我可能正在访问一个无效的内存插槽。然而,只是为了测试,我仍然这样做。在许多幸运的情况下,我在"*t2 = 0x01;"处没有出现错误。但是"delete[] t;"总是引发"HEAP CORRUPTION DETECTED: after Normal block(#56)"错误。为什么呢?

注意:我担心的是,为什么它没有引发异常后"*t2 = 0x01;"?为什么要等到"delete[] t;"?

未定义行为是未定义的-任何事情都可能发生。

在这种情况下,最可能发生的具体事情是堆管理器过度分配了您的t,并在分配的内存之后放置了哨兵字节。当您释放内存时,它会检查这些哨兵字节,当它们发生更改时,它会标记堆损坏。