指標 動態記憶體分配

2022-05-30 17:30:11 字數 1332 閱讀 7594

c++中的動態記憶體分配機制

c++中使用new和delete來完成在堆上對動態記憶體的分配和釋放。

注.所有指標都應該被初始化

如果指標指向的動態記憶體被釋放或沒有指向合法的位址,就應該將指標設定為nullptr,否則記憶體洩漏

變數:

double* pvalue {};

pvalue=new double;

*pvalue=9.0;

或double* pvalue {};

pvalue=new double ;

或合併為一句

double* pvalue };

delete pvalue;

陣列:

char* pstr ;

delete pstr;

pstr = nullptr;

可以順便初始化:int *data };

多維陣列:

double (*pbeans)[4] {};

pbeans= new double [3][4];

或合為一步:double (*pbeans)[4] ;

delete pbeans;

pbeans = nullptr;

c語言中的動態記憶體分配機制

malloc:

double *ptd;

ptd = (double *)malloc( n * sizeof(double));

free(ptd);

請求n個double型別的空間

calloc:

long *newmem;

newmem =(long *)calloc( n,sizeof(long));

第乙個引數是所需記憶體單元的數量,第二個引數是每個單元以位元組計的大小。calloc將塊中全部位都置0。

變長陣列(vla)中的動態記憶體分配:

int n=5;

int m=6;

int ar[n][m];  //變長陣列

int (*p1)[6];

int (*p2)[m];  //變長陣列

p1=(int (*)[6])malloc( n *6 *sizeof(int));

p2=(int (*)[m])malloc( n *m *sizeof(int));  //變長陣列

注:在陣列傳遞作為引數傳遞過程中必須指定列

如:double (int ar[6]);

指標 堆記憶體分配(動態記憶體)

一 對於普通陣列來說,在定義或初始化時必須確定元素個數,即下標必須是已知的,即在編譯時已知。例 定義陣列時 int a 6 初始化陣列時,float a 對陣列a來說,雖然沒有下標,但是通過 中的元素個數,可以查出其下標為4。像這樣的格式 int a 錯誤,下標未知 int a n 錯誤,同上 in...

指標 3(動態記憶體分配)

動態記憶體分配 重點 傳統陣列的缺點 1.陣列長度必須事先制定,且只能是常數,不能是變數 例 int a 5 ok int len 5 int a len error 2.傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放 在乙個函式執行期間,系統為該函式中陣列所分配的空間會一直存在,直到該函...

C和指標 動態記憶體分配

void malloc size t size 分配所需的記憶體空間,並返回乙個指向它的指標。記憶體塊的大小,以位元組為單位。void calloc unsigned int num,unsigned int size 功能 在記憶體的動態儲存區中分配num個長度為size的連續空間,函式返回乙個指...