1 C语言_二维数组动态数组分配和释放
1.1 数组指针的内存分配和释放
-
//方法一
-
char (*a)[N];
//指向数组的指针
-
a = (
char (*)[N])
malloc(
sizeof(
char [N]) * m);
//n列m行
-
-
free(a);
-
-
//方法二
-
char **a;
-
int i;
-
a = (
char **)
malloc(
sizeof(
char *) * m);
//分配指针数组
-
for(i=
0; i<m; i++)
-
a[i] = (
char *)
malloc(
sizeof(
char) * n);
//分配每个指针所指向的数组
-
-
for(i=
0; i<m; i++)
-
free(a[i]);
-
free(a);
-
-
//方法三
-
char **a;
-
int i;
-
a = (
char **)
malloc(
sizeof(
char *) * m);
//分配指针数组
-
a[
0] = (
char *)
malloc(
sizeof(
char) * m * n);
//一次性分配所有空间
-
for(i=
1; i<m; i++)
-
a[i] = a[i
-1] + n;
-
-
free(a[
0]);
-
free(a);
1.2 指针数组的内存分配和释放
-
//方法一
-
char* a[M];
//指针的数组
-
int i;
-
for(i=
0; i<M; i++)
-
a[i] = (
char *)
malloc(
sizeof(
char) * n);
-
-
for(i=
0; i<M; i++)
-
free(a[i]);
-
-
//方法二
-
char* a[M];
//指针的数组
-
int i;
-
a[
0] = (
char *)
malloc(
sizeof(
char) * M * n);
-
for(i=
1; i<M; i++)
-
a[i] = a[i
-1] + n;
-
-
free(a[
0]);
2 C++_二维数组动态数组分配和释放
2.1 数组指针的内存分配和释放
-
//方法一
-
char (*a)[N];
//指向数组的指针
-
a =
new
char[m][N];
-
-
delete[] a;
-
-
//方法二
-
char **a;
-
a =
new
char* [m];
//分配指针数组
-
for(
int i=
0; i<m; i++)
-
a[i] =
new
char[n];
//分配每个指针所指向的数组
-
-
for(i=
0; i<m; i++)
-
delete[] a[i];
-
delete[] a;
2.2 指针数组的内存分配和释放
-
//方法一
-
char **a;
-
a =
new
char* [m];
-
a[
0] =
new
char[m * n];
//一次性分配所有空间
-
for(
int i=
1; i<m; i++)
-
a[i] = a[i
-1] + n;
//分配每个指针所指向的数组
-
-
delete[] a[
0];
-
delete[] a;
-
-
//方法二
-
char* a[M];
//指针的数组
-
for(
int i=
0; i<M; i++)
-
a[i] =
new
char[n];
-
-
for(i=
0; i<M; i++)
-
delete[] a[i];
-
-
//方法三
-
char* a[M];
//指针的数组
-
a[
0] =
new
char[M*n];
-
for(
int i=
1; i<M; i++)
-
a[i] = a[i
-1] + n;
-
-
delete[] a[
0];
注意: new
和delete
要注意配对使用,即有多少个new
就有多少个delete
,这样才可以避免内存泄漏!