delete指標的指標,delete掉的是什麼

2021-06-25 14:44:04 字數 2640 閱讀 6314

1樓:du瓶邪

簡單的測試:

c/c++ code

// 此處t是不完整型別 , 編譯會出錯

typedef char t;

typedef char type_must_be_complete[ sizeof(t)? 1: -1 ];

(void) sizeof(type_must_be_complete);

// 此處t是完整型別 , 編譯不會出錯

typedef char t[1];

typedef char type_must_be_complete[ sizeof(t)? 1: -1 ];

(void) sizeof(type_must_be_complete);

2樓:

r指向的是p,而p是直接定義的,不能用delete來刪除。程式執行會出錯的。

比如 int a; int *r=&a; delete r; 一樣。

程式會除錯的原因:

因為class a的賦值建構函式中是將x指標進行賦值,所以在main()函式中b變數實際是將a的x地址複製到b,即b.x=a.x;如果開啟delete a;則會釋放x指向的記憶體,隨後b變數在main()函式結束時,自動呼叫解構函式,再次去delete x,這是x實際指向的記憶體已經被釋放了,所以出錯。

3樓:匿名使用者

delete 只是c++封裝了一個類似操作符的東西傳入的是 記憶體的首地址

顯然你傳入的r 不是p指向的首地址,所以不掛就萬幸了你想吧, 拿一個無效的地址去查連結串列(記憶體按塊連結起來的),會怎樣把delete *r; 還差不多

4樓:匿名使用者

delete是刪除該指標所指向的記憶體內容。

delete r是刪除了變數p的記憶體。但new int所申請的記憶體還在。

5樓:匿名使用者

r--->p--->int

所以delete r是刪掉p記憶體,與int無關,但由於p沒啦~所以你也取不了int了

c++ 中delete一指標後,該指標的是什麼?是 null 嗎?

6樓:

delete一個指標之後,只是**指標指向位置的空間,而指標本身的值不變。你需要手工將其賦值為null。

另外delete null的話不會有任何事情發生。

7樓:匿名使用者

不是 delete後就變成懸垂指標 就是沒有用的指標了最好自己將他指向null

如 delete p;

p = 0; // 0 == null

這樣就安全了。

否則會產生不必要的後遺症(在大型程式裡你就會懊惱了,當然這個我也不太懂了)

8樓:匿名使用者

這書我看過了 c++沉思錄 c++primer 上面都提到智慧指標 是這樣的:u_ptr這個類算是**類吧(有時叫它控制代碼類 其實我也不知道為什麼) 因為它有計數 計數的是有多少個物件是u_ptr類**的類(原始的) 每建立或者複製這種型別的物件 實際上在u_ptr中的計數加1(有多少個原始的類型別的物件指向u_ptr) 只有一個u_ptr指向原始的類(或是別的) 注意:當u_ptr中的計數為0時就是沒有物件對向他 所以執行delete p 而**類本身沒有動態申請堆空間 釋放的只是原始類(u_ptr指向的)申請的空間 我覺得你沒有弄清楚指標p和u_ptr之間的區別

會的!p成為野指標 如果在訪問p將出錯 因為p指向的記憶體空間以不在 但p還是指向原來的地方啊…

9樓:匿名使用者

c++ 中delete一指標後,該指標為野指標。其值不變,還是指向原來的單元,但若訪問這個單元,結果是無法預料的。

10樓:匿名使用者

delete刪除的只是該指標指向的記憶體,該指標變成一個野指標,需要重置為null。

11樓:匿名使用者

野指標,需要置null

c++中的delete到底是清空什麼?是指標本身還是指標所指向的值?

12樓:匿名使用者

c++的delete要執行兩個步驟:

1 按照指標型別,呼叫該類的解構函式。

(這個是c的free沒有的功能)。

2 根據指標型別,釋放相應寬度的記憶體空間。(類似c的free)。

從這個題目來說,delete是是否指標所指向的物件。而不是釋放指標本身。

一般而言,delete p;以後最後跟一個 p=null;避免無效指標的二次訪問。

13樓:匿名使用者

主要是**記憶體,目的是為了告訴作業系統程式對這部分記憶體不在使用了 讓作業系統可以把這部分記憶體拿去做其它事情

14樓:

是清空記憶體,是指:指標指向的值的空間(記憶體),用於**記憶體

15樓:青檸

new 和 delete 是一組 new申請記憶體,delete釋放記憶體,記得將釋放的指標置為null

16樓:匿名使用者

指向的值,如果不用delete,指標本身沒了,但是所指向的空間沒有被釋放。

在C 中,指標被delete後而不賦值為NULL,那該指標是什麼樣的狀態,它有指向的記憶體空間嗎

那個指標的值是不變的,也就是還指向你申請來的那塊空間但是。即然delete了,那塊空間就不再規你的程式所有了,所以雖然你的那個指標還指向那塊記憶體空間 但你並不具有對那塊空間的使用權,訪問權。所以當你在delete後如果試圖使用的話,程式就會崩潰所以最好賦上null,防止你寫程式時不小心引用導致錯誤...

kdj指標屬於什麼型別的指標,KDJ指標屬於什麼型別的指標?它的作用是什麼?

kdj指標又叫隨機指標,是一種相當新穎 實用的技術分析指標,它起先用於 市場的分析,後被廣泛用於 的中短期趨勢分析,是 和 市場上最常用的技術分析工具。隨機指標kdj一般是用於 分析的統計體系,根據統計學原理,通過乙個特定的週期 常為9日 9周等 內出現過的最 最低價及最後乙個計算週期的 價及這三者...

陣列指標和指標陣列的區別,c語言中的指標陣列和陣列指標的區別

int a 3 4 這個bai無需多說,就du是乙個二zhi維陣列。int p 4 就相當於daoint p 4 它就是乙個二維陣列的指標,可以 專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。p a int p 3 是指標陣列。說白了,就是定義了三個指標,分別為p 0 p...