1樓:匿名使用者
可以,只要對相同地址new和delete配對使用都會正確**記憶體。更好的辦法是使用智慧指標unique_ptr和shared_ptr。
2樓:無非灬依舊
可以解決,因為申請的指標q已經指向了p申請的這個int例項,delete的話就是把這個動態分配的空間給釋放掉,所以這種方式是可以解決這裡的記憶體洩露問題。
c++中給結構體分配動態記憶體的問題……用new嗎 怎麼用?
3樓:非常可愛
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++預設提供。 4樓:匿名使用者 直接new就可以bai了,不過c結構du 體如果定zhi義在.h檔案dao裡,最好回加上,避免出答錯#ifdef _cplusplus extern "c"pos; #ifdef _cplusplus }#endif pos *p = new pos; delete p; 5樓:匿名使用者 注意c++和c的函式 bai庫不同喵~ realloc 只是du 「從操zhi作dao系統中分配記憶體給回當前程序」 new 預設答包含「從作業系統分配記憶體給當前程序,並使用建構函式初始化該記憶體區域」 兩個操作。 如果只是想要在c++裡面編譯通過,加上 extern "c" {} 關鍵字註釋c**塊即可喵。 6樓:小忍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應該 內是這樣容吧 7樓: 比如:pos *p; p=new pos; if(!p) p->i=3; p->=i*i;... 8樓:匿名使用者 可以用new和delete,和使用普通變數一樣 9樓:粟筠項奇思 c++中是沒有結構抄體的,從baic繼承來的struct已經變成類了,而不再du只是一個zhi結構體,直接new就可以了。dao #include struct myclass ;myclass::myclass(intarg) myclass::myclass() void myclass::show() c++中給結構體分配動態記憶體的問題……用new嗎 怎麼用 10樓:匿名使用者 c++中是沒有結構體的,從c繼承來的struct已經變成類了,而不再只是一 個結構專體,直接new就可屬以了。 #include struct myclass ;myclass::myclass(int arg)myclass::myclass() void myclass::show() c++用new動態分配記憶體空間賦值的問題 11樓:匿名使用者 scanf("%d",&(*ps)); ps本身就是一個指標,直接用就可以了,scanf("%d",ps); 你那樣寫ps本身是空的*取值符號取不到資料就錯了。 c++ char*型別new的記憶體釋放出問題了 12樓: point = new char[5];時 point指向bai了du一新分配的記憶體 point = "fda";時,zhipoint拋棄了dao剛new的記憶體,指向了"fda"所在地址。fda"本身已經被分 回配好答記憶體。所以剛才的new記憶體已經失去意義,因為point已經不再指向它了。這也是造成記憶體洩露的一個原因,因為剛動態分配的那塊記憶體已經沒辦法釋放了(被point指標拋棄了,沒辦法再找到這塊記憶體地址,也就沒法delete)。 "fda"的記憶體不是動態分配的,所以delete時出錯。 這要一個一個字元來操作:point[0] = 'f'; point[1] = 'd'; point[2] = 'a'; 或者參考 jxq61 兄的回答。(注意,這裡才是真正的把字元存到新分配的記憶體裡) 13樓:匿名使用者 point 是指標。指向了bai一du 個字串。這個字串是zhi佔六個位元組的。daopoint = new int[10]; 這個是申請了版 一個動態記憶體,int型的權佔4個位元組。 int[10].只是一個整形變數,並不是申請了10個int型的記憶體。而是,只申請了一個。六個位元組的東西往四個位元組裡存,能不出錯嗎? 我是學c語言的,c++只是看了看。我按照c語言的東西來解釋的。希望對你有用。 14樓:匿名使用者 point = new int[10] 表示你分配了 10個int型的空間,你給它賦字串肯定錯了。 就如 int s[5] = "hello" 15樓:萬哩挑壹 delete q;//釋放 原來來的 delete p;//釋放現在的源 ' 記住:記憶體釋放了之後不能再使用bai該塊記憶體,最好在釋du放之後將指標zhi變數賦dao值為空 。 delete q; q= null; c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++14於2023年8月18日公佈。 其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性! 16樓:匿名使用者 point = new char[5]; point = "fda";//這句來話登出了就源對了 不知道為什麼 point = "fda" 應改為: memmove( point, "fda", 3); 或:strcpy( point, "fda"); 在最前面加上: #include "string.h" 17樓:匿名使用者 程式在解構函式中釋放字元陣列的時候失敗了,程式試圖去釋放尚未分配的記憶體空間 關於c++動態記憶體分配 這樣寫會不會出什麼問題? char *a = new char []; a 18樓:匿名使用者 請在new char的時候就寫好申請內 存的大小new char[size], 編譯器並不會從後文或者執行時推斷需要多少記憶體 我沒查到不在裡寫上申請記憶體大小時編譯器會怎麼處理, 看上去應該會報錯才對, 能通過編譯的話我猜可能是當作0或者1或者某個預設值, 總之申請到的記憶體不一定能存得下從cin接收的字串 即使不填上要申請的記憶體大小也能正常執行可能只是char *a指向的那一塊記憶體剛好沒有被用到而已, 從cin輸入的字串足夠長的話多半就會報錯了 ostream operator 這個函式的du問題,你用的不zhi是引用型別,當daomain裡面的cout 後,因為內部的ch需要版析權構,所以checkoutrecord的wait list會被析構掉。具體你可以看自己的析構方法。最好不要在vector中放指標,一般人都會用錯。delete i... new 分配記憶體 通用格式是 型別名 指標 new 型別名 如 int pi new int 型別可以是基本資料型別 結構體 自定義類等delete 來釋放記憶體 通用格式是 delete 指標名 注意 delete 與 new 配對,只能釋放 new 分配的記憶體。delete只能用一次,不能釋... 這個問題首先得從堆疊說起,一個程式一般分為三段 段,資料段 靜態資料 和堆疊段。堆疊段儲存程式中的變數 程式傳遞的引數等 動態分配的變數儲存在堆中,靜態分配的儲存在棧中 堆疊的增長方式如下 程式在執行的時候會預先分配堆疊空間,所以你的問題中不一定修改了不該修改的地方,有可能那裡本來就是空的。再回到m...C動態記憶體分配的問題,關於C 動態記憶體分配的問題。
怎麼使用new和delete動態分配記憶體
c語言 malloc 函式 分配記憶體空間尺寸的問題