C++中的動態內存分配機制
c++中使用new和delete來完成在堆上對動態內存的分配和釋放。
注.所有指針都應該被初始化
如果指針指向的動態內存被釋放或沒有指向合法的地址,就應該將指針設置為nullptr,否則內存洩漏。
變量:
double* pvalue {};
pvalue=new double;
*pvalue=9.0;
或
double* pvalue {};
pvalue=new double {9.0};
或合並為一句
double* pvalue {new double{9.0}};
delete pvalue;
數組:
char* pstr {new char[20]};
delete [] pstr;
pstr = nullptr;
可以順便初始化:int *data {new int [10] {2,3,4}};
多維數組:
double (*pbeans)[4] {};
pbeans= new double [3][4];
或合為一步:double (*pbeans)[4] {new double [3][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]);