簡體   English   中英

內存泄漏與否?

[英]Memory leak or not?

我在一個更大的代碼中間有一小段代碼:

int *p = new int[100];
p += 50;
delete []p;

編譯器將只刪除從第51 位的位置記憶? 我認為確實如此。 但是,在數組指針的情況下,編譯器會保存一個附加項,該項指示已分配的對象數。 那么,在這種情況下,是否應該繼續刪除超出分配大小的內存? 或不會刪除第51 -100 th元素,並保持第1 -50 在存儲器中,在這種情況下內存泄漏可能發生。

它實際上是未定義的行為。 你只能delete / delete[]你從new / new[]得到的東西。

這是未定義的行為。 C ++標准說

3.7.4.2釋放功能

3 ...否則,如果標准庫中提供給operator delete(void*)的值不是先前調用operator new(std::size_t)operator new(std::size_t, const std::nothrow_t&)返回的值之一,則行為未定義operator new(std::size_t, const std::nothrow_t&)標准庫中的operator new(std::size_t, const std::nothrow_t&) ,如果標准庫中提供給operator delete[](void*)的值不是前一次調用返回的值之一,則行為operator new(std::size_t, const std::nothrow_t&)標准庫中的operator new[](std::size_t)operator new[](std::size_t, const std::nothrow_t&)

4 ...使用無效指針值(包括將其傳遞給釋放函數)的效果未定義。 (在某些實現中,它會導致系統生成的運行時故障。)

編譯器不分配或刪除內存,它依賴於操作系統,如果你在一個你沒有從new獲得的指針值上調用free會發生什么。 唯一能保證的是它是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM