二级指针的输入输出模型

二级指针的输入输出模型

指针做输入,是在主调函数中分配内存;指针做输出,是指在被调用函数中分配内存,通过指针做函数参数把运算结果返回给主调函数。

//指针做输出:求文件中的两段话的长度:

int getMem(char **myp1, int *mylen1, char **myp2, int *mylen2)

{

char *tmp1 = NULL;

char *tmp2 = NULL;

tmp1 = (char *)malloc(100);

if(tmp1 == NULL) 

{return -1;}

strcpy(tmp1, "abcdefg");

*myp1 = tmp1;

//

tmp2 = (char *)malloc(100);

if(tmp2 == NULL) 

{return -2;}

strcpy(tmp2, "11223344");

*myp2 = tmp2;

return 0;

}

int getMemFree0(char **myp) //二级指针可以释放掉内存,并将指向此内存的实参指针置为NULL

{

char *tmp = NULL;

if (myp == NULL)

{

return -1;

}

tmp = *myp;

free(tmp);

*myp =     NULL;

return 0;

}

//

int getMemFree1(char *myp) //二级指针只可以释放掉内存,但不能将指向此内存的实参指针置为NULL,造成实参指针野指针现象。

{

char *tmp = NULL;

if (myp == NULL)

{

return -1;

}

tmp = myp;

free(tmp);

return 0;

//释放掉tmp即myp所指向的内存空间后,无法通过myp将实参置为NULL,因为此处myp的存储是实参的拷贝,和实参已无关系。

}

void main()

{

char *p1 = NULL;

int len1 = 0;

char *p2 = NULL;

int len2=0;

ret = getMem(&p1, &len1, &p2, &len2);

printf("p1: %s\n", p1);

printf("p2: %s\n", p2);

/*

// 在主调函数中进行时释放也是可以的:

if(p1!=NULL)

{

free(p1);

p1==NULL;

}

if(p2!=NULL)

{

free(p2);

p2==NULL;

}

*/

getMemFree0(&p1); //或者getMemFree1(p1);

getMemFree0(&p2); //或者getMemFree1(p2);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容