c中delete一指標後,該指標的是什麼 是NULL嗎

2021-03-21 12:07:35 字數 4997 閱讀 9413

1樓:

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

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

2樓:匿名使用者

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

如 delete p;

p = 0; // 0 == null

這樣就安全了。

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

3樓:匿名使用者

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

4樓:匿名使用者

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

5樓:匿名使用者

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

6樓:匿名使用者

野指標,需要置null

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

7樓:匿名使用者

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

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

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

8樓:匿名使用者

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

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

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

9樓:匿名使用者

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

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

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

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

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

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

10樓:匿名使用者

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

11樓:

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

12樓:青檸

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

13樓:匿名使用者

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

c++delete物件指標的時候,指標的值會改變嗎?指標指向的物件內容會改變嗎?

14樓:歡樂三重谷

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

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

c++中delete後賦null的問題

15樓:莫讓年華敷水流

new是跟系統借一塊記憶體,成功的話,系統給你一塊記憶體,並且系統會保證不會把你分配的記憶體給其他申請到

delete是跟系統還一塊記憶體,成功的話,系統會讓其他人可以分配到這塊記憶體

而new和delete的記憶體內容系統是不關心的,所以一般malloc後,都會初始化記憶體

釋放記憶體是沒有改變記憶體內容

指標是指向那塊記憶體,申請到了記憶體就會指向那塊記憶體,跟記憶體內容沒有關係

如: int* pint = new int;

pint = null; //這裡跟分配的記憶體沒關係,只是將pint這個指標指向null而已 (這裡由於沒有delete會記憶體洩漏)

16樓:匿名使用者

說的也是啊,析構之後ptr也會被銷燬的不需要置為null執行時發生什麼錯誤?

是不是你的c不是動態分配的…在你這裡delete ptr相當於delete c…

你把接受const char*的建構函式發來

17樓:心燈一豆

**沒貼全,目測是你**問題

delete null指標會發生什麼 5

18樓:

樓主你好!

c++標準規定,delete (void*)0;是安全的。

二現在的編譯器通常都會有一個#define null 0的巨集所以,delete null也是安全的 無效操作;

當然,誰也不會給你0地址的記憶體,更不會允許你去釋放記憶體0地址的記憶體,因為那是作業系統管轄下的東西。在delete 這種操作的彙編碼裡邊,通常會有一個校驗。如果需要釋放的空間是0地址,那麼不做任何操作直接返回

19樓:榮程路

什麼都不會發生。

delete 將會對指標進行檢查,當發現指標被指向null時將會跳過delete。

我們經常會發現類似這種**:

if (ptr != null)

明顯,這不是必要的。

但是我們最好在delete之後,將指標指向null,因為delete不會將指標指向null,而且對同一個指標呼叫兩次delete,會導致意想不到的事情發生。更糟糕的是,多次delete會導致一個你很難用debug去發現的一個bug,且你的應用會表現的很奇怪。

所以,請總是使用以下語句

delete ptr;ptr = null

把指標賦值為null了,那麼該指標就什麼也不指向了。但是,你還可以對該指標重新賦值,讓它可以重新指向。

如果賦值為null,並且用delete進行銷燬了,那麼該指標就不能再重新進行指向了。如果需要,你得另外定義一個指標了。

20樓:匿名使用者

我來告訴你:

把指標賦值為null了,那麼該指標就什麼也不指向了。但是,你還可以對該指標重新賦值,讓它可以重新指向。

如果賦值為null,並且用delete進行銷燬了,那麼該指標就不能再重新進行指向了。如果需要,你得另外定義一個指標了。

回答完畢。

21樓:匿名使用者

delete操作的意思是**指標所指向的記憶體空間。而null表示這個指標沒有指向任何記憶體地址,所以delete 一個值為null的指標,由於指標沒有指向任何地址,所以delete也就沒有**任何記憶體空間,即什麼也不會發生。

22樓:想把你忘了

null空指標 說明它存在 這個指標變數 delete後

再需要時 就要new了

23樓:匿名使用者

首先,delete是對指標的指向空間的釋放,不會改變指標的值,即指標不為null,把指標指向的空間釋放掉,但是指標的本身內容,即指向空間的地址,是不會改變的;指標為null時,沒有空間可釋放,也就不去釋放了,而指標依然有效,指標的內容依然是null,在指標的有效域結束時,指標本身所佔記憶體自動被釋放。

24樓:匿名使用者

delete是釋放記憶體的,你對指標進行delete只是釋放掉了指標所佔有的記憶體空間,別的啥也不發生!

25樓:匿名使用者

//如果賦值為null,並且用delete進行銷燬了,那麼該指標就不能再重新進行指向了。如果需要,你得另外定義一個指標了。

//不理解

int* p = 0;

delete p;

p = new int(100);

printf("%d\n",*p);

//這個**有什麼錯?

c++中delete過後的指標居然還能用 如: int *p=new int(5); delete p; *p=6;這句應該報錯才對啊

26樓:匿名使用者

如果你對已經釋放了的記憶體進行讀寫操作,

那這個行為導致的結果是《未定義》的。

「未定義」就是說隨著程式的運**況而定,

有時候這次執行你去讀,

沒有問題,依舊能讀取東西出來;

但是下一次執行,未必能成功。

更嚴重的情況就是導致崩潰。

27樓:匿名使用者

因為 delete不會把指標變為空指標,指標還指向已經被刪除了的記憶體

28樓:匿名使用者

delete p,只是釋放了指標p的記憶體空間而已,又不是把p這個變數刪除了

29樓:匿名使用者

編譯執行本身不會報錯,地址是可寫的,只有其他語句操作此地址時,資料是錯的

首屈一指的意思,首屈一指的「首」是什麼意思?

讀音 sh u q y zh 釋義 指居第一位。引申為最好的。近義詞 名列前茅,鶴立雞群,獨佔鰲頭。反義詞 名落孫山 出處 清 顏光敏 顏氏家藏尺牘 施侍讀閏章 海論詩輒為首屈一指。語法 動賓式 作謂語 定語 含褒義。例句 他在這個方面,那可是首屈一指的。首屈一指 最好的意思。解釋 首 首先。扳指頭...

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

c 的delete要執行兩個步驟 1 按照指標型別,呼叫該類的解構函式。這個是c的free沒有的功能 2 根據指標型別,釋放相應寬度的記憶體空間。類似c的free 從這個題目來說,delete是是否指標所指向的物件。而不是釋放指標本身。一般而言,delete p 以後最後跟一個 p null 避免無...

買鞋時為什麼要留出一指的位置

買鞋的時候留出一指是為了穿的時候不會太緊抵腳,特別是小孩兒腳長得快,不要買剛剛好的尺碼,最好留一指,這樣穿著才舒服!一個手指 的概念是 1 鞋幫是有彈性的,2 腳也是有彈性的,3 腳在鞋裡是可以移動的。因此,即使看上去腳後跟與鞋後壁之間沒有空隙,但把手指頭往裡面塞也是可以塞進去的。測量鞋子是否合腳時...