c++ - delete 对象的指针
ringa_lee
ringa_lee 2017-04-17 12:00:23
0
3
828
class A
{
public:
    A()
    {
        i =10;
    }
private:
    int i;
};
int main(){

    A a;
    A *p = &a;
    delete p;
    return 0;
}

请问这段程序运行为什么出错?
运行结果:free(): invalid pointer: 0xbfc367b8 ***

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
刘奇
cppint main(){
    A a;
    A *p = &a;
    delete p;
    return 0;
}

A a 產生了一個 A 對象,似乎 delete &a 釋放 a 的記憶體空間是沒錯的。但不要忘了,在 main() {} 函數結束的時候,會自動釋放其中的局部變量,也就是 a,加上你寫的 delete,就會釋放兩次,所以會報錯。

一般情況下 newdelete 對應,沒用 new 完全不需要 delete。而且盡可能保證newdelete 在同一段程式碼區塊中;如果需要在兩個地方分別進行操作的時候,通常是在constructor 中new,在destructor 中delete;或是在create() 中new,在delete()或release() 中delete,同時注意create() 與delete() 配對…

Peter_Zhu

沒有new過的地址是不需要delete的,new和delete應該是配對的

PHPzhong

new 是將物件的記憶體存放在中,也就是放在使用者控件,記憶體由使用者自行管理,所以記憶體的釋放,要用delete

A a;這種,是將物件的記憶體存放在,也就是系統控件,記憶體的釋放由系統管理,所以使用delete會報錯。要釋放的地址並不是使用者可以控制的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!