鱼C论坛

 找回密码
 立即注册
查看: 2317|回复: 2

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

[复制链接]
发表于 2020-3-6 12:50:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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);

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

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include "string.h"

  5. void getMen(char*** myp2, int num)
  6. {
  7.         int i;
  8.         char** tmp = (char**)malloc(sizeof(char*) * num);
  9.         if (tmp == NULL)
  10.         {
  11.                 return;
  12.         }
  13.         for (i = 0; i < 5; i++)
  14.         {
  15.                 tmp[i] = (char*)malloc(sizeof(char) * 10);
  16.                 sprintf(tmp[i], "%d%d%d", i + 1, i + 1, i + 1);
  17.         }
  18.         *myp2 = tmp;
  19. }

  20. void getFree(char** myp2, int num)//void getFree(char*** myp2,int num)  
  21. {
  22.         int i;
  23.         if (myp2 == NULL)
  24.         {
  25.                 return;
  26.         }
  27.         //char** tmp = *myp2;
  28.         for (i = 0; i < num; i++)
  29.         {
  30.                 free(myp2[i]);
  31.                 myp2[i] = NULL;
  32.         }
  33.         free(myp2);
  34.         myp2 = NULL;
  35. }

  36. void main()
  37. {
  38.         int i;
  39.         int num = 5;
  40.         char** p2 = NULL;
  41.         getMen(&p2, num);
  42.         for (i = 0; i < num; i++)
  43.         {
  44.                 printf("%s\n", p2[i]);
  45.         }
  46.         printf("\n");

  47.         getFree(p2, num);
  48.         system("pause");
  49. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 15:03:38 | 显示全部楼层
free是要和malloc搭配使用
你看看你使用的malloc的时候,是返回的几级指针?你有申请过三级的指针吗?
你不能因为看到有一个char *** 就觉得要free它
举个例子:
  1. void swap(int* a,int* b){
  2.         int temp;
  3.         temp=*a;
  4.         *a=*b;
  5.         *b=temp;


  6. }


  7. void test(){


  8.         int a,b;
  9.         a=1;
  10.         b=2;
  11.         swap(&a,&b);
  12.         printf("%2d,%2d",a,b);
  13.        

  14.        
  15. }
复制代码

你看到int*为啥不free呢?因为你根本没有malloc何须free呢?
因此,当你malloc的时候,你才需要对这个malloc产生的指针进行free,其他不用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 11:56:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 03:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表