琴长不过时光 发表于 2020-3-6 12:50:47

小白求教 关于二级三级指针的疑问

void getMen(char*** myp2, int num)
void getFree(char** myp2, int num)//void getFree(char*** myp2,int num)
请问后面释放内存的时候,为啥必须用三级指针,不能用二级指针吗?二级指针不是同样指向在堆中开辟的5个字节的空间吗 ?char** tmp = (char**)malloc(sizeof(char*) * num);

还有,啥时候用二级指针?

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void getMen(char*** myp2, int num)
{
        int i;
        char** tmp = (char**)malloc(sizeof(char*) * num);
        if (tmp == NULL)
        {
                return;
        }
        for (i = 0; i < 5; i++)
        {
                tmp = (char*)malloc(sizeof(char) * 10);
                sprintf(tmp, "%d%d%d", i + 1, i + 1, i + 1);
        }
        *myp2 = tmp;
}

void getFree(char** myp2, int num)//void getFree(char*** myp2,int num)
{
        int i;
        if (myp2 == NULL)
        {
                return;
        }
        //char** tmp = *myp2;
        for (i = 0; i < num; i++)
        {
                free(myp2);
                myp2 = NULL;
        }
        free(myp2);
        myp2 = NULL;
}

void main()
{
        int i;
        int num = 5;
        char** p2 = NULL;
        getMen(&p2, num);
        for (i = 0; i < num; i++)
        {
                printf("%s\n", p2);
        }
        printf("\n");

        getFree(p2, num);
        system("pause");
}

4goodworld 发表于 2020-3-6 15:03:38

free是要和malloc搭配使用
你看看你使用的malloc的时候,是返回的几级指针?你有申请过三级的指针吗?
你不能因为看到有一个char *** 就觉得要free它
举个例子:
void swap(int* a,int* b){
        int temp;
        temp=*a;
        *a=*b;
        *b=temp;


}


void test(){


        int a,b;
        a=1;
        b=2;
        swap(&a,&b);
        printf("%2d,%2d",a,b);
       

       
}
你看到int*为啥不free呢?因为你根本没有malloc何须free呢?
因此,当你malloc的时候,你才需要对这个malloc产生的指针进行free,其他不用

琴长不过时光 发表于 2020-3-7 11:56:51

页: [1]
查看完整版本: 小白求教 关于二级三级指针的疑问