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号