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]);