C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new

2021-06-25 14:44:04 字數 2840 閱讀 8268

1樓:匿名使用者

這樣是會有記憶體洩漏的,因為第一次執行s = new stu; 後,系統申請了一塊新的記憶體空間(型別為stu),並把其地址賦給s

第2此執行s = new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了

而delete s; 只是把現在s指向的記憶體中的變數刪除,這就把第二次申請的變數刪除了,但是這樣並不能將第一次申請的變數刪除,因為其地址已經丟失掉了

就算你執行兩次delete語句也是沒有用的,這樣就算編譯器不報錯,執行程式的時候都會報錯,因為你刪除了同一個地址兩次

2樓:

第一次new的記憶體未釋放。

每一次new返回分配的記憶體地址放在s裡面,假設地址值為a,大小為sizeof(stu)

第二次new同樣分配了一個大小為sizeof(stu)的記憶體,地址假設b。

再delete s,系統根據你提供的地址s,只把後一次分配的地址b所在的大小為sizeof(std)的記憶體釋放了,前面的分配的記憶體a就洩漏了。

3樓:

不是明白著的嗎?肯定洩漏了,申請了兩個,只釋放了一個!!!

4樓:咴忻

你跟蹤一下吧,如果s的地址變化了就會發生洩漏

5樓:

上面說得都對,我就不重複了

6樓:匿名使用者

哈哈,五樓的例子好形象啊,我頂啊!!

7樓:利芳懿邶豆

樓上的正解,補充下,記憶體分配都有個最小值,它和你制定的位元組數不一定相等,一般會分配頁對齊的區域,比如你分配一個位元組,但實際上卻是分配了128個位元組(假設記憶體分配的最小單位是128位元組)

c++ 動態分配記憶體 記憶體洩漏問題 new

8樓:匿名使用者

可以,只要對相同地址new和delete配對使用都會正確**記憶體。更好的辦法是使用智慧指標unique_ptr和shared_ptr。

9樓:無非灬依舊

可以解決,因為申請的指標q已經指向了p申請的這個int例項,delete的話就是把這個動態分配的空間給釋放掉,所以這種方式是可以解決這裡的記憶體洩露問題。

c++中給結構體分配動態記憶體的問題……用new嗎 怎麼用?

10樓:非常可愛

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++預設提供。

11樓:匿名使用者

直接new就可以bai了,不過c結構du

體如果定zhi義在.h檔案dao裡,最好回加上,避免出答錯#ifdef _cplusplus

extern "c"pos;

#ifdef _cplusplus

}#endif

pos *p = new pos;

delete p;

12樓:匿名使用者

注意c++和c的函式

bai庫不同喵~

realloc 只是du 「從操zhi作dao系統中分配記憶體給回當前程序」

new 預設答包含「從作業系統分配記憶體給當前程序,並使用建構函式初始化該記憶體區域」 兩個操作。

如果只是想要在c++裡面編譯通過,加上 extern "c" {} 關鍵字註釋c**塊即可喵。

13樓:小忍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應該

內是這樣容吧

14樓:

比如:pos *p;

p=new pos;

if(!p)

p->i=3;

p->=i*i;...

15樓:匿名使用者

可以用new和delete,和使用普通變數一樣

16樓:粟筠項奇思

c++中是沒有結構抄體的,從baic繼承來的struct已經變成類了,而不再du只是一個zhi結構體,直接new就可以了。dao

#include

struct

myclass

;myclass::myclass(intarg)

myclass::myclass()

void

myclass::show()

C 中指標與動態記憶體分配和記憶體洩漏問題

int main 這段 沒有造成洩漏 int main 這段 出現記憶體洩漏了 int p new int 申請一塊堆區記憶體,就給個名為f吧,現在p指向f p a p指向變數a,是個區域性變數,在棧上分配,此時沒有任何指標堆區記憶體塊f 記憶體f就被孤立起來,無法進行釋放,修改等操作了,等同於無法...

C動態分配的問題,C 動態分配字串陣列的問題

使用stl 標準模板庫 中的vector 向量 或者list,但是個人覺得你這種情況vector比較方便,stl提供了一些通用的資料型別,你可以通過其成員函式實現一些通用的操作而不必關心它是如何實現的 具體的vector使用可以在網上找到非常多的教程,下面簡單顯示一下你的問題中的使用方法 inclu...

c 中new結構體的問題,c 中new一個結構體的問題。

這是個引數匹配的問題。你的test函式的引數是一個指標陣列,陣列的每個元素是指向stu結構體的指標,而你在呼叫test函式時,你傳進去的引數一個指向結構體陣列的指標,他們的型別不匹配,你只要將test函式的引數中的 去掉即可,即改為void test struct stu s 因為引數型別不匹配。將...