1樓:xxiao文
如果程式還在執行記憶體開闢的東西不會丟失,重啟之後你沒執行程式當然記憶體的東西會自動消失難道還累加啊 那你那程式豈不是比病毒還可怕,這些寫程式很基本的不釋放記憶體的程式不是好程式...
2樓:
new之後不delete,被分配的記憶體不會永遠丟失,而是一直被佔用。
系統重啟,被分配的記憶體別說使用,就是你分配記憶體的這個程式也不能使用,或者重新執行。
3樓:炫影霜星
關機後ram中內容都會丟失。
4樓:
在c++中可以用new和malloc在堆上申請空間,並且必選相應地用delete和free進行釋放空間,因為在c++編譯器中,堆這部分儲存空間是完全由程式設計師自己管理的,即由程式設計師自己分配和釋放。如果在程式中用new和malloc申請了空間的話,但是在程式中沒有手動用delete和free釋放空間的話,在程式執行過程中以及程式執行完畢後,這段空間還是被佔用,即無法再訪問到這部分空間,事實上這就是所謂的「記憶體洩露」問題。但是在你電腦重啟後,這部分空間會被釋放的,不會一直被佔用,在程式中可以重新訪問到這部分儲存空間。
c++中給結構體分配動態記憶體的問題……用new嗎 怎麼用?
5樓:非常可愛
c++中給結構體分bai配動態du記憶體是用new。
示例:struct mystruct
mystruct *pmysrt=new mystruct;
pmysrt->a=1;
pmysrt->b='a';
cout
擴充套件資料zhi c++中new的用法 dao1、呼叫operator new分配記憶體,operator new (sizeof(a)) ; 版2、呼叫建構函式生成權類物件,a::a() ; 3、返回相應指標 ; 4、分配記憶體這一操作就是由operator new(size_t)來完成的,如果類a過載了operator new,那麼將呼叫a::operator new(size_t ),否則呼叫全域性::operator new(size_t ),後者由c++預設提供。 6樓:匿名使用者 直接new就可以bai了,不過c結構du 體如果定zhi義在.h檔案dao裡,最好回加上,避免出答錯#ifdef _cplusplus extern "c"pos; #ifdef _cplusplus }#endif pos *p = new pos; delete p; 7樓:匿名使用者 注意c++和c的函式 bai庫不同喵~ realloc 只是du 「從操zhi作dao系統中分配記憶體給回當前程序」 new 預設答包含「從作業系統分配記憶體給當前程序,並使用建構函式初始化該記憶體區域」 兩個操作。 如果只是想要在c++裡面編譯通過,加上 extern "c" {} 關鍵字註釋c**塊即可喵。 8樓:小忍and奏 void buildstack(stack *s){(*s).base=(m*)new((&(*s).base) sizeof((*s). base))char[((*s).stsize 100)*sizeof(m)]; ……bai new(地址du)型別[大小 zhi] delete &(*s.base) //釋放dao應該 內是這樣容吧 9樓: 比如:pos *p; p=new pos; if(!p) p->i=3; p->=i*i;... 10樓:匿名使用者 可以用new和delete,和使用普通變數一樣 11樓:粟筠項奇思 c++中是沒有結構抄體的,從baic繼承來的struct已經變成類了,而不再du只是一個zhi結構體,直接new就可以了。dao #include struct myclass ;myclass::myclass(intarg) myclass::myclass() void myclass::show() 在c++中,釋放new分配的記憶體空間時,使用delete和delete[]是不是有區別?詳細說明下 12樓:匿名使用者 c++告訴我們在**用 new 分配的單個物件的記憶體空間的時候用 delete,**用 new 分配的一組物件的記憶體空間的時候用 delete。 樓主的這個問題提得很好。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。 關於 new 和 delete,其中又分為兩種情況:(1) 為基本資料型別分配和**空間;(2) 為自定義型別分配和**空間。 對於 (1),上面提供的程式已經證明了 delete 和 delete 是等同的。但是對於 (2),情況就發生了變化。請看下面的程式。 #include ; using namespace std; class t ~t() };int main() 大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。 從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了解構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的解構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的解構函式。 基本型別的物件沒有解構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。 所以一個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用 13樓:匿名使用者 如果new得是一個變數,那麼使用delete就可以。 但是如果new得是一個陣列,使用delete的話只能釋放陣列的第一個元素佔用的記憶體,這會造成嚴重的記憶體洩漏的。 使用new申請的陣列應該使用delete來銷燬它。 14樓:匿名使用者 delete一般只釋放用new所分配的,並且只分一個型別的大小的記憶體,每個delete和new對應;而delete釋放用new所分配的,並且為同一種型別的多個元素一次所分配的記憶體。也就是用new一次為一個元素分配記憶體時,用delete;而用new一次為一個集合(陣列)分配記憶體時,用delete。如char *p=new char時用delete p;youclass *pclass=new youclass時用delete pclass;又如用char *p=char[10]時用delete p;youclass *pclass=new youclass[10]時用 delete *pclass; 15樓:匿名使用者 delete 是銷燬一個變數!delete 是銷燬一個變數陣列 c++ 關於記憶體洩露問題。記憶體洩露是指用new 分配的記憶體沒有用delete釋放,如果未釋放會有什麼後果? 16樓:匿名使用者 你家只有那麼大,你買了越來越多的東西,舊的東西不丟掉會怎樣? 會滿的。記憶體未釋放,可用記憶體慢慢就滿了,其他程式執行不了,系統也越來越慢。 陣列記憶體訪問越界,還沒有洩露呀 17樓:匿名使用者 越界是訪問了不被允許的記憶體空間,也就是一段x記憶體地址是屬於a程序,另一段y地址是屬於b程序,如果a程序突然間修改了y地址上的內容,就會有可能導致系統崩潰 記憶體洩露,是指記憶體申請的空間,在使用完後,沒有被釋放。c/c++最顯著特點是指標控制。但new的記憶體必須手工是否,如果用完後沒有釋放。 那麼就會浪費了系統資源,反覆洩露的話,有可能導致系統資源不足崩潰 18樓: 一樓講得很詳細了,補充一點,c++的陣列是一個指向第一個元素地址的指標,所有的元素是一段連續的記憶體地址,所以,陣列越界會導致該指標指向別的記憶體地址,導致記憶體洩露 19樓:匿名使用者 作業系統會在應用程式結束後釋放堆疊資料**的記憶體,所以。。。。作業系統挺友善。。。。到這樣是很不好的。*** 北問邇 1.就算沒有free main 結束後也是會自動釋放malloc 的記憶體的,這裡監控者是作業系統,設計嚴謹的作業系統會登記每一塊給每一個應用程式分配的記憶體,這使得它能夠在應用程式本身失控的情況下仍然做到有效地 記憶體。你可以試一下在taskmanager裡強行結束你的程式,這樣顯然是沒有... 一般來說,記憶體需要用多少,就開闢多少,如果你非要用迴圈的方式不斷的增加記憶體大小,建議你用以下方法 關鍵是用到函式realloc,這個函式的作用,網上很多,可以去查查。主要是用來在原有記憶體空間的基礎上,增加記憶體空間大小的。include include void main for i 0 i ... 如果要求行列都是動態的話,最簡單的辦法就是這樣,n行m列 int p int malloc sizeof int n for int i 0 i n i p i int malloc sizeof int m 然後就可以這樣傳遞 void f int p f p 不過用完了還要一個一個的去free ...C語言動態分配記憶體為什麼總是提示警告?可以執行
C語言為陣列動態分配記憶體並賦值,為什麼第一種方法正確,第二種方法錯誤
關於c語言動態分配二維陣列的問題