//三级指针的使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//三级指针做输出
int getmun(char ***pout/*out*/,int *num){
int ERRO_MSG = ;
if (pout==NULL)
{
ERRO_MSG = ;
printf("危险操作内存pout==NULL erro msg:%d", ERRO_MSG);
return ERRO_MSG;
}
if (num == NULL)
{
ERRO_MSG = ;
printf("危险操作内存num==NULL erro msg:%d", ERRO_MSG);
return ERRO_MSG;
}
int numx = ;
char **ptemp = (char **)malloc(sizeof(char *)*numx);
int i = ;
for (i = ; i < numx; i++)
{
ptemp[i] = (char *)malloc(sizeof(char)*);
char buf[] = { };
sprintf(buf, "第%d同志们大家好", i);
strcpy(ptemp[i], buf);
}
*pout = ptemp;
*num = numx;
return ERRO_MSG;
}//打印数组
int printfall(char **pin,int num){
int ERRO_MSG= , i = ;
if (pin==NULL)
{
ERRO_MSG = ;
printf("pin==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
for (i = ; i < num; i++)
{
if (pin[i] != NULL)
{
printf("%s\n", pin[i]);
}
else{
ERRO_MSG = ;
printf("数据录入错误! erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
}
return ERRO_MSG;
}//释放堆内存(三级指针做输入)
int freeall(char ***pin,int num){
int ERRO_MSG = , i = ;
if (pin==NULL)
{
ERRO_MSG = ;
printf("pin==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
char **tempp = *pin;//灵性代码,用一个变量接收一下
if (tempp == NULL)
{
ERRO_MSG = ;
printf("*pin==NULL 二维数组数据不可以为空 erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
for (i = ; i < num; i++)
{
if (tempp[i] != NULL)
{
free((*pin)[i]);
tempp[i] = NULL;
}
else{
ERRO_MSG = ;
printf("*pin==NULL 二维数组数据不可以为空 erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
}
free(tempp);
tempp = NULL;
*pin = NULL;
return ERRO_MSG;
}void main()
{
char **p1 = NULL;
int num = , i = ;
int rest= getmun(&p1, &num);
//打印p1的内容
if (rest==)
{
//打印数组
printfall(p1, num);
//释放内存
freeall(&p1,num);
printf("%p\n", p1);
} system("pause");
}