c若指標指向的物件不存在了,指標是為空(NULL),還是指向的記憶體不可訪問了

2021-03-26 02:27:01 字數 2468 閱讀 3348

1樓:華仔橋

如果是你自己定義的指標變數,如果指向的物件不存在了,該指標就會成為野指標。如果是指向簡單變數時,讀出的資料是隨機的,寫操作可能會是程式core掉。如果指向的複雜的物件,例如:

class a

a* pa = new(a);

如果pa指向的物件不存在了,使用pa->a檢視或者賦值就會使程式core掉

2樓:匿名使用者

針對樓主的疑問,我自己親自測了下,

在linux下gcc版本4+把原物件delete,他的指標呼叫不涉及到記憶體的執行正常,涉及到記憶體的立馬崩潰.在mac os下gcc版本4.6.

1原物件delete且指標賦值為空,無論呼叫啥全部通過.將本地物件delete,賦值為空,呼叫涉及到記憶體才崩潰.所以懷疑mac系統對記憶體有保護機制.

正式回答樓主的問題:指向的物件不存在了,指標肯定不為空,他指向一個地址,但是那塊地址裡存了什麼我們無法預估了.現在我對這種東西的做法是儘量使用單例,物件自己管理起來,一般情況物件是一直存在的,除非一開始都沒宣告起來.

3樓:匿名使用者

不可訪問

訪問的話會出現記憶體錯誤

4樓:匿名使用者

指標不為空,但訪問指向的記憶體時有可能出錯。

5樓:匿名使用者

delete 後,如果沒有顯式賦值為null,未必會是null

6樓:

訪問的話,會出現記憶體錯誤

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

7樓:匿名使用者

那個指標的值是不變的,也就是還指向你申請來的那塊空間但是。即然delete了,那塊空間就不再規你的程式所有了,所以雖然你的那個指標還指向那塊記憶體空間

但你並不具有對那塊空間的使用權,訪問權。

所以當你在delete後如果試圖使用的話,程式就會崩潰所以最好賦上null,防止你寫程式時不小心引用導致錯誤

8樓:匿名使用者

指標只是儲存所指物件的地址,沒有任何狀態資訊。delete之後,本身指標的內容是不會改變的,只不過它裡面儲存的地址所對應的記憶體在系統裡標記為未使用的罷了。那段記憶體隨時可能分配給其它程序或者程序內的其它變數。

你應該避免使用delete後的記憶體,這是你的事。為了容易標識,所以才賦值為null。

c++ 物件指標 設定為null 後 為什麼會這樣?

9樓:匿名使用者

p = null 後只bai是簡單的吧p的值賦為0,對du申請的記憶體沒有zhi影響。dao這時版候對p的操作都是危險的。

至於你程式權執行的結果,無論是helloworld還是hello都是有問題的,即便有一個看起來執行過了。

這和編譯器、當時的機器執行狀態有關

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

10樓:

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

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

11樓:匿名使用者

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

如 delete p;

p = 0; // 0 == null

這樣就安全了。

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

12樓:匿名使用者

這書我看過了 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還是指向原來的地方啊…

13樓:匿名使用者

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

14樓:匿名使用者

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

15樓:匿名使用者

野指標,需要置null

指向指標的指標

char a a是指標指向a 0 a 0 指向字串aaa 是個指標陣列 所以p也應該是個 指向指標的指標 宣告為char p 另外你這個迴圈啦4次 應該迴圈3次 for j 3 j c primer 中說過指向指標的指標地址就是被指向的指標的地址。這麼說有點拗口,其實就相當於2個指標指向同一個地址。...

c中指向行的指標是什麼指標?與普通指標有什麼區別

指向行的指標 它指向的記憶體裡面存放的 依然是指標,而普通指標指向的記憶體裡面存放的是相應型別的資料,比如普通指標int p,p指向的記憶體存放的是int型資料 而int p 5 其中p指向的記憶體存放的還是指標,該指標指向一個存放5個資料的陣列,可以理解為指向行。c語言中的 行指標 與 元素指標 ...

c 中空指標物件訪問成員問題,c 中空指標物件訪問成員問題

這與類名呼叫函式是一樣的 與物件無關 哦 錯了 只有靜態函式才可以 好像是這樣 主動使用一個類時,類就會載入到記憶體中 包括類的靜態成員,和方法 靜態和非靜態都會載入 如此,我們宣告一個類指標時,類就會被載入 所以即使是一個空指標,但訪問的是類的方法。引用smile5201314y的回答 pbase...