解構函式中delete的問題

時間 2021-09-04 02:34:22

1樓:保晏然

解構函式中應該是這樣:(假設char*變數名是str)

if(str!=null)deletestr;

因為你是在成員函式中new的,有可能在你銷燬物件時str並沒有分配記憶體,而你卻檢視釋放它指向的記憶體,當然會出錯。加上if判斷後就可以避免這種情況。

2樓:燃燒的左眼

建構函式中都初始化為0了??

首先指標怎麼能成為0呢?

你應該在類宣告裡就分配記憶體,如果在構造裡分配,構造也是函式 分配的只會是動態記憶體,返回就要出錯。或者你不申請記憶體 在函式裡讓它指向某個靜態記憶體 也就是普通變數也可以

析構的時候要講指標置空 避免野指標

3樓:圓喜

new的時候char* p = new type[0] 不要出現,也就是判斷下陣列是否》0

檢查char* 指標用的時候是否重定向了

delete 的時候 要判斷下指標是否為空任何時候delete p 之後立刻把指標p = null;置空,這樣即使你不小心重複delete p; 也不會有問題。

4樓:匿名使用者

delete 的時候 要判斷下指標是否為空!

有可能你在銷燬物件時候並沒有給指標分配記憶體空間也是一個問題!

加上一個if語句判斷下!

5樓:弭晨威釗

listnode::~listnode()把listnode的解構函式的deletenext註釋掉,delete

next把下個節點記憶體給釋放掉,引起佇列錯誤。

c 解構函式問題,c 解構函式的問題

1 不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2 定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就無法釋...

c中建構函式與解構函式的問題,C 中建構函式與解構函式的問題

你的getname函式在 你的類定義中只有getscore和getid c 關於建構函式和解構函式呼叫次數的問題 沒問題啊。引數傳遞的時候第一次拷貝構造呼叫,在函式返回的時候賦值給c2 再次呼叫了拷貝構造。析構的話 c1 c2 c 三次 傳遞引數和返回引數各一次拷貝建構函式,所以是2次 有兩個物件c...

c 解構函式是怎麼釋放記憶體的

你在方法2中可能例項化類1時沒有初始化指標,或者指標為空,程式結束時,呼叫解構函式delete一個野指標或空指標的時候就可能會出錯了,而你把方法1的指標換成物件,在程式結束的時候,即使你沒有清理,編譯器都會幫你釋放空間的,因此不會出錯。 自動生成的只會原樣複製。如果你的類裡有一個指標,你給它分配了記...