請教 C 中,在中new申請的記憶體用完不刪,會導致記憶體洩露嗎

2021-04-18 11:51:47 字數 780 閱讀 5638

1樓:匿名使用者

先來進行分析抄一下:

fucntion函式裡的

int *p = new int[100000];

做的事情

1、申請了一

片記憶體int[100000]

2、申請了了一個指標變數 *p。同時p指向這片記憶體。

在子函式結束以後,會做的事情

1、銷燬指標變數*p

注意:只是銷售了指標變數,並不會自動的**int[100000]這片記憶體

new出的記憶體必須要用delete才會**

結果就造成了這片記憶體 沒有人知道在哪了,因為指向它的指標*p已經被銷燬了。

(當然了,作業系統是知道的。但是它認為你程式中還在使用這片記憶體,因為你沒有delete掉)

這樣你程式一直開著的話,就會一直佔用著這些記憶體,但是實際上你卻沒有使用。

當然你main函式一退出,所有的記憶體就會都**了。

2樓:匿名使用者

首先要清楚堆記憶體和棧記憶體的區別

1.new 和 malloc開闢的是堆記憶體,生命週期由版程式設計師管理,在子函式中開闢的記憶體權,如果不手動的釋放的話,會到程式結束後,才被系統**。

2.普通的變數宣告,在記憶體中是棧記憶體,函式結束之後,生命週期也就結束了。

3樓:匿名使用者

肯定會的.

new出的記憶體必須要用delete釋放.

c++中,new申請的是堆記憶體,是在近堆中還是遠堆中申請?請幫忙解釋原因,多謝~

在c 中,釋放new分配的記憶體空間時,使用delete和d

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型...

c中new到底有什麼用

區域性變數的儲存位置在棧內 vs下一個執行緒預設棧是1m 函式體結束就自動 new malloc 分配的空間在堆內,理論上是2g 如果不手動free delete,這個空間是不會被釋放的。如果要申請的記憶體比較大,就要用new,否則使用棧空間是不可能成功的。new 在堆中分配一塊記憶體空間,一般都需...

c中new和override的區別

如果你用override,則無論呼叫的是a類還是b類中的test 系統都會找到它實質類的test 如果是用的new,則可以通過型別轉換呼叫到基類的test 下面是override的情況 a a new a b b new b a a1 new b a.test 呼叫a中test b.test 呼叫b...