多级指针内存模型(以三级指针为例)
指针的最大作用:间接赋值
推论:n级指针形参可以间接改变n-1及指针实参的值
三级指针作用:通过函数参数来为二级指针分配内存,间接赋值,回收内存
//为二级指针分配内存
int getMem(char ***p3 , int num)
{
int i = 0;
char **tmp = NULL;
if (p3 == NULL)
{
return -1;
}
tmp = (char **)malloc(sizeof(char *) * num);
if (tmp == NULL)
{
return NULL;
}
for (i=0; i<num; i++)
{
tmp[i] = (char *)malloc(sizeof(char) * 100 ); //char buf[100];
sprintf(tmp[i], "%d%d%d", i+1, i+1, i+1);
}
*p3 = tmp;
return 0;
}
//释放二级指针内存
//释放时按从低级向高级的顺序释放
void getMem_Free(char ***p3 , int num)
{
int i = 0;
char **tmp = NULL;
if (p3 == NULL)
{
return ;
}
tmp = *p3;
for (i=0; i<num; i++)
{
free(tmp[i]);
}
free(tmp);
*p3 = NULL; //把实参赋值成null,避免野指针
}
int main()
{
int i = 0, j = 0;
char **p2 = NULL;
int num = 5;
char *tmp = NULL;
char tmpbuf[100];
getMem5(&p2, num);
for (i=0; i<num; i++)
{
printf("%s \n", p2[i]);
}
getMem_Free(&p2, num);
return 0;
}