我的程序因无效指针而崩溃。当我用它运行gdb时,它会告诉我导致崩溃的无效指针的地址。它崩溃的线是
delete some_pointer;
但是当我在删除之前打印出指针时,地址与gdb告诉我无效的地址不同。那些some_pointer我正在删除它没有导致问题的指针崩溃? gdb说 -
free(): invalid pointer: 0xbfffea84 ***
那么为什么每次都有不同地址的免费版会崩溃?我只是想确保我在这里正确思考。
答案 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。删除指针两次会导致所描述的症状。