指针的细微差别? “释放后修改了免费堆块”

时间:2014-04-15 03:53:58

标签: c++ pointers heap-corruption

我的印象是,为了使用delete(或delete []),我只需要提供地址和对象类型。例如,假设我在内存地址x有10个MyClass类对象。我也有一个全局(void *)vPtr。前段时间这件事发生了

 vPtr = (void*)(myClassPtr);

在某个时间点,不再需要那些对象,我希望使用该内存来存储不同的对象,所以我打电话给

delete[] (myClass*)(vPtr);

执行得很好。然后我开始创建我的新对象并将vPtr重新分配到他们的地址

MyClass* myPtr2 = new MyClass[10];
vPtr = (void*)(myPtr2);

现在,一旦我完成了使用10个MyClass对象,我希望重新利用它们用于更多不同对象的内存。所以我打电话给:

delete[] (MyClass*)(vPtr);    //just like before, but this time, VS2010 breaks
                                //and complains about heap corruption 

我错过了什么?尝试通过delete [] 释放的内存被我的10个MyClass对象占用,那么为什么会出现堆损坏?我很困惑,因为我在类MyFoo的对象上使用相同的方法,当我逐步执行代码时,每次我希望释放内存并创建新对象时重新分配我的(void *)指针并调用delete [],我永远不会抱怨堆腐败。

0 个答案:

没有答案