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

2021-03-19 18:32:41 字數 4177 閱讀 5817

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輸入的字串足夠長的話多半就會報錯了

C動態記憶體分配的問題,關於C 動態記憶體分配的問題。

ostream operator 這個函式的du問題,你用的不zhi是引用型別,當daomain裡面的cout 後,因為內部的ch需要版析權構,所以checkoutrecord的wait list會被析構掉。具體你可以看自己的析構方法。最好不要在vector中放指標,一般人都會用錯。delete i...

怎麼使用new和delete動態分配記憶體

new 分配記憶體 通用格式是 型別名 指標 new 型別名 如 int pi new int 型別可以是基本資料型別 結構體 自定義類等delete 來釋放記憶體 通用格式是 delete 指標名 注意 delete 與 new 配對,只能釋放 new 分配的記憶體。delete只能用一次,不能釋...

c語言 malloc 函式 分配記憶體空間尺寸的問題

這個問題首先得從堆疊說起,一個程式一般分為三段 段,資料段 靜態資料 和堆疊段。堆疊段儲存程式中的變數 程式傳遞的引數等 動態分配的變數儲存在堆中,靜態分配的儲存在棧中 堆疊的增長方式如下 程式在執行的時候會預先分配堆疊空間,所以你的問題中不一定修改了不該修改的地方,有可能那裡本來就是空的。再回到m...