C语言 二维数组(指针)动态分配和释放
转载自:
https://blog.csdn.net/jzj_c_love/article/details/82596149
C 二维数组(指针)动态分配和释放
(1)已知二维
char (*a)[N]; //指向数组的指针
a = (char (*)[N])malloc(sizeof(char *) * m);
printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0]));//N,一维数组
free(a);
(2)已知第一维
char* a[M]; //指针的数组
int i;
for(i=0; i<M; i++)
a[i] = (char *)malloc(sizeof(char) * n);
printf("%d\n", sizeof(a)); //4*M,指针数组
printf("%d\n", sizeof(a[0]));//4,指针
for(i=0; i<M; i++)
free(a[i]);
(3)已知第一维,一次分配内存(保证内存的连续性)
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;
printf("%d\n", sizeof(a)); //4*M,指针数组
printf("%d\n", sizeof(a[0]));//4,指针
free(a[0]);
(4)两维都未知
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m); //分配指针数组
for(i=0; i<m; i++)
{
a[i] = (char *)malloc(sizeof(char) * n); //分配每个指针所指向的数组
}
printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0])); //4,指针
for(i=0; i<m; i++)
{
free(a[i]);
}
free(a);
(5)两维都未知,一次分配内存(保证内存的连续性)
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;
}//采用如上内存分配方法,意味着将a的值初始化为m*n的二维数组首地址,且这块内存连续
printf("%d\n", sizeof(a)); //4,指针
printf("%d\n", sizeof(a[0])); //4,指针
free(a[0]);
free(a);
记录每天生活的点点滴滴,呵呵呵呵呵呵

浙公网安备 33010602011771号