-
malloc 和 realloc
malloc 和 realloc
- 一维数组
int n = 10; int *d =NULL; try { d = (int*)malloc(sizeof(int)*n); } catch(bad_alloc &exp) { cout<<exp.what()<<endl; } memset(d,0, sizeof(int)*n); for (int j = 0;j < n;j++) { cout<<d[j]<<endl; }
try { d = (int*)realloc(d,sizeof(int)*20); //当重新申请空间后,原来内存的数据会自动复制到 //新申请的空间,只需要对新申请的空间进行初始化, //原来的空间也不需要释放。 } catch(bad_alloc &exp) { cout<<exp.what()<<endl; } if (d) { free(d);//释放内存 d = NULL; }
-
二维数组
-
二维数组的重新分配与一维数组的相同int m = 10;//行 int n = 20;//列 int ** D = (int **)malloc(m * sizeof(int*)); if (!D) { cout<<"memory is not enough"<<endl; } for(int i = 0;i< m; i++) { D[i] = (int*)malloc(n*sizeof(int)); memset(D[i],0,n* sizeof(int)); } for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { cout<<D[i][j]<<endl; } } for (int i =0;i<m;i++) { free(D[i]); } free(D); D = NULL; }
m = 20; n = 40; D = (int **) realloc(D,m * sizeof(int*)); if (!D) { cout<<"memory is not enough"<<endl; } for(int i = 0;i<10; i++) { D[i] = (int*)realloc(D[i],n * sizeof(int)); for (int j=20; j<n; j++) { D[i][j]=i+j; } } cout<<"realloc finish"<<endl; for(int i = 10; i<m; i++) { D[i] =(int*)malloc(n * sizeof(int)); for (int j = 0;j<n;j++) { D[i][j]=i+j; } } for (int i=0; i<m; i++) { for (int j=0; j<n; j++) { cout<<D[i][j]<<" "; } cout<<endl; } for (int i =0;i<m;i++) { free(D[i]); } free(D); D = NULL;
2. New 操作符
-
使用new操作符分配申请一维数组
int *d;
try
{
d = new int[10];
}
catch (CMemoryException* e)
{
cout<<"memory is not enough"<<endl;
}
int *d1 = new int[20];
for (int i=0;i<10;i++)
{
d1[i]=d[i];//必须将d中的内容拷贝到现在新申请的数组d1上,而realloc 不需要
}
delete []d;
for (int i=10;i<20;i++)
{
d1[i]=100;
}
delete [] d1
-
使用new 操作符申请二维数组
int **d;
d = new int* [10];
for(int i=0;i<10;i++)
{
d[i]=new int[10];
}
for(int i = 0;i<10;i++)
{
delete [] d[i];
}
delete d;