首頁  >  問答  >  主體

c++ - delete 对象的指针

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_leeringa_lee2714 天前832

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-04-17 12:02:23

    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() 配對…

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 12:02:23

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 12:02:23

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

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

    回覆
    0
  • 取消回覆