删除时指针崩溃无效,但指针不同

时间:2012-02-23 18:56:56

标签: c++ pointers crash gdb free

我的程序因无效指针而崩溃。当我用它运行gdb时,它会告诉我导致崩溃的无效指针的地址。它崩溃的线是

delete some_pointer;

但是当我在删除之前打印出指针时,地址与gdb告诉我无效的地址不同。那些some_pointer我正在删除它没有导致问题的指针崩溃? gdb说 -

free(): invalid pointer: 0xbfffea84 ***

那么为什么每次都有不同地址的免费版会崩溃?我只是想确保我在这里正确思考。

3 个答案:

答案 0 :(得分:0)

如果你有这样的事情:

struct S
{
   int* p;
   ~S() { delete p;}
};

S* s;
std::cout << (void*)s;
delete s;

在删除p时,您的程序可能会崩溃,但会打印s。他们可能会有所不同。

答案 1 :(得分:0)

如果您有一个具有多重继承的类,则将根据指针的类型调整地址。 free将需要使用基类型,但编译器应该能够在场景后面无形地进行正确的转换。

答案 2 :(得分:0)

几乎可以肯定,在您正在查看的删除之前,指针是delete d。删除指针两次会导致所描述的症状。