程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-C++ : 請問下面這段代碼為何會出現double free 的問題?

c++-C++ : 請問下面這段代碼為何會出現double free 的問題?

編輯:編程綜合問答
C++ : 請問下面這段代碼為何會出現double free 的問題?

下面這段代碼對象在析構的時候判斷了指針是否為空再進行操作,為何還會出現double free 的問題?

 #include<iostream>
using namespace std;
class base {
public:
    base(int *a):p(a) {}
    base(int num) :p(new int(num)) {}
    base(base& mid) :p(mid.p) {
    cout << "base is constructing!\n";
    if (p != NULL) cout << "p is not NULL!\n";
}

    ~base() { 
    if (p != NULL ) {
    delete p;
    p = NULL;
}
    if (p == NULL)
    cout << "p is NULL!\n";
}
private:
    int *p;
};
int main() {
    base one(1);
    base two(one);
}

最佳回答:


這樣寫會報錯的,同一個地址被釋放兩次。原因:
p1=new int;
p2=p1;
現在要釋放p2了,
delete p2;
p2=NULL;
但是p1還是以前那個地址,它怎麼會是NULL?
再次釋放這個地址會報錯(野指針)
你這個就是淺拷貝引起的~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved