一.C语言 ------malloc() free()
以二维整型数组为例int Array[x][y]
1.内存不连续
先遵循从外到里,逐层申请的原则:
最外层的指针就是数组名Array,他是一个二维指针,指向的是Array[],Array[]是一维指针,所以给Array申请内存空间需要一个二维指针int ** p;
int **Array; // 二维指针 Array[x][y]
Array=(int **)malloc(x*sizeof(int *)); // 为Array指针分配一个指向X 个指向int 的指针
for(i=0;i<x;i++)
Array[i]=(int *)malloc(sizeof(int)*y); // 分配每个指针的地址
/***********************释放*******从最外层开始**/
for(i=0;i<x;i++)
{
free(Array[i]);
Array[i]==NULL;
}
free(Array)
不连续内存,但是可用array[x][y]的方式访问。
2.一位数组代替二维数组
//int array[x][y];
int array*=(int *)malloc(sizeof(int)*x*y); //
优:连续内存
劣:不能用array[x][y]的方式访问
二.C++ new delete
int x = 3, y = 4;
int *p = new int*[x];//创建一个动态 int* 型数组
for(int i = 0; i < y; ++i)
p[i] = new int[x]; //再创建一个动态 int 型数组
for (int i = 0; i < y; ++i)
{
delete p[i];//由里至外,进行释放内存。
p[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还将守在原处,只是释放内存而已,仅此而已。
}
delete []p;
p = NULL;