C 中為什麼有delete 這種寫法?

2021-08-03 14:53:06 字數 486 閱讀 9594

以 vc++ 2008 舉例,如果執行以下**

foo*p

=new

foo[

10];

intn=*

((int*)

p-1);

猜猜 n 的值是多少?是 10

編譯器在使用new分配記憶體的時候在返回的記憶體塊裡放了乙個 陣列的 size

而用 new 分配的時候則不會

在使用 delete 的時候,生成的**最後是用 p 去呼叫free

而是用 delete的時候,生成的**是 用 p - 4(按字節減) 去呼叫free

但是編譯器無法分辨給出的 *p 到底是指向陣列還是指向單個物件,所以需要開發者自己指定。

那麼如果用 delete作用在乙個 new分配的指標上會怎麼樣呢?

debug版下會有assert,release版下會造成記憶體洩漏,因為呼叫free時指標非法會失敗,但是不會崩潰。

為什麼Python中沒有 a 這種寫法

一開始學習 python 的時候習慣性的使用 c 中的 a 這gincxd種寫法,發現會報 synt程式設計客棧axerror invalid syntax 錯誤,為什麼 python 沒有自增運算子的這種寫法呢?我們可以看一下 python 下 a 2 b 2 id a id 函式用於獲取物件的記...

為什麼不用C 寫遊戲

當今世界上絕大多數遊戲都是c 寫的,為什麼要說不呢?要做什麼?寫遊戲。寫遊戲首先要考慮些什麼?做什麼樣的遊戲,圖形 音效 遊戲邏輯如何實現。用c 要先考慮什麼?定義跨平台資料型別抽象,實現常用集合類,設計巨集實現rtti,寫乙個支援unicode並可以和其他多種字串型別互相轉換的字串類,自定義記憶體...

為什麼寫部落格?和電子筆記有哪些區別?

大綱 1.部落格與電子筆記有哪些異同點 2.寫部落格的好處 3.總結 一 部落格與電子筆記有哪些異同點 相同 部落格和電子筆記都可以記錄我們學習的過程,以及加強我們對知識的理解程度和使用。不同 部落格主要是 記錄成長史和分享知識和經驗以及交流經驗 電子筆記主要 為了在需要的時候快速查詢這些知識,減輕...