void MyFunc(char *pReturn, size_t size)
{
……
pReturn = (char *)malloc(sizeof(char) * num);
……
}
void main(void){
char *pMyReturn=NULL;
MyFunc(pMyReturn,10);
}
首先声明一个指针
char *pMyReturn=NULL;
然后调用MyFunc处理并返回一段长度为size的一段动态内存。为什么会失败?地址作为函数参数是不会产生副本的啊!
void MyFunc (char ** pReturn, size_t size)
{
* pReturn = (char *)malloc(size);
}
MyFunc (&pMyReturn, 100);// 注意参数是 & pMyReturn,而这样却可以成功,
请大神详细解释
指针可以看做是一个整数,4个字节的存储空间
你失败的那个例子,就跟 @garfileo 说的一样, 依旧只是备份一个4个字节的空间出来,并且指向新申请的内存。
函数运行完后, 这4个直接的空间一样被释放掉了。 新申请的内存,依然存在,并没有被释放。
所以传址能成功,传值失败
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。