class A
{
public:
A()
{
i =10;
}
private:
int i;
};
int main(){
A a;
A *p = &a;
delete p;
return 0;
}
请问这段程序运行为什么出错?
运行结果:free(): invalid pointer: 0xbfc367b8 ***
怪我咯2017-04-17 12:02:23
cpp
int main(){ A a; A *p = &a; delete p; return 0; }
A a
產生了一個 A 對象,似乎 delete &a
釋放 a 的記憶體空間是沒錯的。但不要忘了,在 main() {}
函數結束的時候,會自動釋放其中的局部變量,也就是 a,加上你寫的 delete
,就會釋放兩次,所以會報錯。
一般情況下 new
和 delete
對應,沒用 new
完全不需要 delete
。而且盡可能保證new
和delete
在同一段程式碼區塊中;如果需要在兩個地方分別進行操作的時候,通常是在constructor 中new,在destructor 中delete;或是在create() 中new,在delete()或release() 中delete,同時注意create() 與delete() 配對…
PHPz2017-04-17 12:02:23
new 是將物件的記憶體存放在栈
中,也就是放在使用者控件,記憶體由使用者自行管理,所以記憶體的釋放,要用delete
而A a
;這種,是將物件的記憶體存放在堆
,也就是系統控件,記憶體的釋放由系統管理,所以使用delete
會報錯。要釋放的地址並不是使用者可以控制的