获取"检测到堆腐败:正常阻塞后#34;释放记忆时

时间:2015-09-16 01:57:52

标签: c++

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

interface xyz{
   int a=1;
}

class Test2 implements xyz{
   public static int a=123;
}    

class Test1{
   public static void main(String aa[]){
      System.out.println(Test2.a);
   }
}

首先,在" char * t2 = t + 22;"我知道我可能正在访问无效的内存插槽。但是,仅仅为了测试,我仍然这样做。在许多幸运的情况下,我在" * t2 = 0x01;"没有错误。但是"删除[] t;"总是提高" HEAP CORRUPTION DETECTED:正常阻止后(#56)"错误。那是为什么?

注意:我担心的是,为什么它不会在" * t2 = 0x01后出现异常;"?为什么必须等到"删除[] t;"?

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,最有可能发生的具体事情是堆管理器过度分配了您t并在分配的内存之后放置了sentinel字节。当你释放内存时,它检查了那些sentinel字节,因为它们已经改变了它标记的堆损坏。