c中的delete的操作到底是怎麼回事

2021-03-09 19:02:01 字數 1489 閱讀 1365

1樓:匿名使用者

00399208 代表的是抄p這個指標指向的地址值,在delete之前輸出的那個5代表p這個指標指向的一個int空間裡面存放的數值;

在你delete之後,p這個指標沒有變化,仍然是00399208,但是它指向的空間已經被釋放了,所以輸出的就是一個「不確定」的數值:-57266307.

對於問題的補充:

2.如果在程式**後面再加上*p=5;cout<<*p<

可以再輸出一個5;注意已經使用了delete操作。

空間雖然釋放了,但那時p這個指標仍然是有效的,它指向的記憶體仍然是可寫的,所以程式會進行正確的輸出。

2樓:何處淬吳鉤

p是個指bai針,int *p=new int(5)使p指向新申請的du具有5個元素的整型陣列這zhi段內dao存,回用delete刪除後,這段記憶體已經被**答,而p沒有改變,仍指向這段記憶體,所以*p是個不確定的值。

1.*p不是一個不確定的值,執行結果總是-572662307。

這是因為p指向的記憶體是固定的,但這段記憶體並未被本程式使用,因此可能被作業系統分配給其他程式,若該段記憶體沒有被分配,則記憶體中的資料是不變的,也就是*p是固定的,另外,不同的編譯器也有不同的約定,有的編譯器會對不屬於本程式的記憶體固定的顯示一個錯誤值。

2.如果在程式**後面再加上*p=5;cout<<*p<

這等於為*p申請了記憶體,存放整型資料5,*p當然=5.

3樓:哀傷落葉

1.指標

baip裡的地址肯定是固定的.

這是因du為程式使用的內zhi存可分成4個部分dao(**區

版,靜態全域性變數區,棧區,堆區),你這裡是

權動態分配記憶體,使用的是堆區,堆裡面的可用空間不是連續的,系統裡面儲存了一個連結串列來放這些可用空間的地址,而你申請記憶體時,系統會從表頭開始檢索,遇到第一個滿足要求的,就把這個地址給你.

你在執行程式時系統找到那個地址給你,結束執行後你那塊記憶體又被還回去了

(delete p),你第二次在執行這個程式,系統還是那樣找,找到的當然還是那個地址.

2.這個結果是對的,但這麼做不好, 你最好在delete p;後加一句

p = null;然後就不要用p 了,我在說下為什麼會出現5

你 delete p;是釋放了p指向的那片記憶體,那麼p指向的內容就不確定了,而p 依然是一個指向int 的指標

而 *p = 5 是讓p指向字面常量5 的地址,5這個常量是直接存放在**區的,

所以之後你不能改變*p的值

4樓:

delete 是釋放new 操作佔用的記憶體,一般new 和delete 是連用的,不釋放記憶體會造成記憶體洩漏,釋放記憶體後 p就是一個無效指標,不能在其上做任何操作

5樓:匿名使用者

這樣操作是危險的!!delete 釋放掉new的空間,所以p所指的內容就釋放掉了。所以 *p是未知的!!!但p本身存放的東西沒有變,要到程式結束時被釋放

C中delete和delete的區別

c 中delete和delete的區別從例項中比較如下 include using namespace std class t t int main delete p1 在 空間的過程中,只有 p1 0 這個物件呼叫了解構函式,其它物件如 p1 1 p1 2 等都沒有呼叫自身的解構函式,這就是問題的...

你的努力到底是為了什麼,你努力工作到底是為了什麼?

我想我努力可能就是為了能與那個明亮的人相匹配吧,可能就是怕自己成功速度比父母老去的速度太慢了吧,可能是意識到18歲的我已經不小了該承擔責任了,可能是希望能博老師的青睞吧,可能是真的很享受那種與別人不同的感覺吧,至少努力是為了以後的我負責吧。我不想幾年後在同學聚會上,仰望著別人的臉色奉承陪笑,也不想看...

廣告文案人員都是怎麼工作的,文案工作到底是幹什麼的

這個問題比較籠統,但我我可以從我對您問題的理解,略答一二。文案有狹義文 案 創意文案 與廣義文案 寫手 之分,我估計你問的是前者。所以我就創意文案的工作方式說一下。通常一個廣告文案人員領到工作任務之後,會先和ae 客戶經理 溝通客戶的需求,理解客戶的生意本質,這是第一步 第二步,要和同一專案的策略經...