小白求教 关于二级三级指针的疑问
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");
} 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,其他不用
顶
页:
[1]