標籤:

C++ new分配的內存不delete會泄漏嗎?

我這樣給float分配了內存

float *p_fees = new float[20];

如果執行完了這個代碼塊, 代碼塊外面還有代碼, 給這個*float分配的內存是不是會泄漏?



艾瑪知乎上居然有我會答的編程問題!


不會報錯,但是在output裡面會有warning,跑久了會出問題,而且關乎內存的問題,很難找到。所以還是養成良好的編碼習慣


你用的是託管的C++嗎?基於.Net的?


關鍵點是new的東西使用了多久,如果確定不再用了,卻不處理,就可以算內存泄漏。

如果程序生命中,只new這一次,如單例,沒毛病。

壞的影響是,不斷的new,OS就只能不斷分配你新的內存,其結果就是你看到你的程序消耗內存不斷增長,這就是內存泄漏壞的影響

對你而言,new/delete是很簡單抽象的,直接交給了OS。對於操作系統,它需要管理這些內存的狀態,那是相當複雜的事了。


對new 可以借用全局變數的內存哇?就是new placement的使用么?


這種c++基礎書上都有的問題。。。題主還是好好看書吧


一個new會向內存申請一塊空間,運行結束時必須釋放空間,即為delete,不delete的話會出現溢出,據說debug也不會報錯呦~

我只是胡扯~


c++中的new和delete最終應該是調用malloc和free吧?所以和c語言一樣啊,你malloc一塊內存不free,於是內存泄露了(大霧)

void * operator new(std::size_t size) throw(std::bad_alloc) {
if (size == 0)
size = 1;
void* p;
while ((p = ::malloc(size)) == 0) {
std::new_handler nh = std::get_new_handler();
if (nh)
nh();
else
throw std::bad_alloc();
}
return p;
}

void operator delete(void* ptr) {
if (ptr)
::free(ptr);

深入探究C++的new/delete操作符


如果進程結束,會自動釋放。所以如果是全局變數的話,應該可以不用delete,反正生命周期和程序一樣長。


推薦閱讀:

C++ 有哪些奇技淫巧?
拷貝構造函數何時調用?
什麼是tlsf內存分配演算法? 它和普通的內存分配演算法有什麼區別?
C++派生類的成員或友員只能通過派生類對象來訪問基類的受保護成員?
變數名儲存在那裡,變數的儲存機制是什麼?

TAG:C |