被调用函数里动态分配的内存要不要手动释放

我想手动释放来着,但是指针是在被调用函数里声明的,在调用函数里释放不了。我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放。在线等... 我想手动释放来着,但是指针是在被调用函数里声明的,在调用函数里释放不了。
我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放。

在线等
展开
 我来答
yb0319
2013-04-19 · TA获得超过188个赞
知道小有建树答主
回答量:590
采纳率:0%
帮助的人:280万
展开全部

你指的“动态分配”是系统自动分配内存,如 char c[100];

还是手动分配的,如 char *p = (char *)malloc(100);

如果是第一种方式,则不需要手动释放。

第二种方式,释放时需要制定内存区域的指针,如free(p)。如果你在调用函数里手动分配了内存,那么需要将内存指针返回,然后再释放。


如 

char * proc1()
{
char *p = (char *)malloc(100);
retrun p;
}
void proc2()
{
char *p = proc1(); //调用 proc1
free(p);
}
百度网友39fe17c85c3
2013-04-19 · 超过34用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:78.5万
展开全部
都看糊涂了,你的意思是如下代码吗?
int* Func2(void)
{
int *p = new int(0);

return p;

}

void Func(void)
{
int *p = Func();

delete p;

p = NULL;

}

如果是如上代码,不可能释放不了,堆是属于整个进程的,在堆中申请的内存在任何地方都可以释放.
追问
我看的是C

被调用函数里的变量不是本地变量吗,它在函数结束时是不是自动删除的。而不用手动释放。
追答
首先,被调用函数里的变量是在线程栈中分配的,在离开作用域里自动回收这是没错的.但这里的自动变量是指针P,而不是指针所指向的内存,这里是有区别的,指针P所占用的内存当然会自动回收,但指针所指的内存是由malloc分配的,这是在进程的默认堆里分配的,必须用free回收(不过就算没调用free程序结束时也会由操作系统回收).
从你发出的代码来看是完全没有问题的,不知道你说的不能释放是什么意思.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cl65agm
2013-04-19 · TA获得超过190个赞
知道答主
回答量:96
采纳率:0%
帮助的人:57.9万
展开全部
如果你的主调函数在一个dll或者exe中,被掉函数在另外的dll或者exe中, 只有CRT的版本一样,你才能delete或者free,要不然可能挂掉。
如果在一个exe或者dll中,你当然可以释放。既然你想释放的指针是那个函数里声明的,想必也是那个函数里new的,这样就更加安全了。
如果你在不同的dll或者exe中互相传指针,那么要本着这样一个原则:谁new的谁delete,提供指针的地方也需要提供一个release函数用于释放指针,这样就不会因为CRT版本冲突导致程序奔溃。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xpston008
2013-04-19 · TA获得超过365个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:342万
展开全部
用智能指针 aut o_ptr 可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时光短I天涯暖
2018-06-25
知道答主
回答量:1
采纳率:0%
帮助的人:836
展开全部
malloc、calloc、realloc申请空间,空间一定是“直接隶属于main()函数的堆上的”。可以想象,如果分配在调用函数的堆上的话,调用函数也结束执行了,那么malloc的空间也就被回收了,这与程序员的期望是不一样的,程序员的逻辑是:我已经申请了,我自己没有释放空间就还能继续正常使用。而且,子函数里边申请的空间,在子函数里边和外边都能释放。
至于子函数中 int* p=malloc(),是的,malloc申请的空间在main()的堆上,必须自己释放。但是这个p,的确是子函数中的一个变量,子函数结束时,p本身占用的空间被回收了,你无法用刚才的p去指向malloc的那块空间了,但是malloc的那块空间还是在的哦,在堆上,而且是main()函数的堆上。
记住,自己malloc、calloc、realloc的,一定提醒自己是不是可以free()掉了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式