动态分配内存的指针释放的问题。不明白,能给解释下吗?

qq_30446977 2015-12-01 08:49:33
#include<stdio.h>
#include<stdlib.h>
#define STRLEN 10
int* qudu_shuzu(void)
{
int *pzu=NULL;
pzu=(int*)malloc(10*sizeof(int)+1);
if(!pzu)
{
printf("fen pei nei cun shibai!\n");
exit(1);
}
int count=0,shu=0,str_len=STRLEN;
printf("qing shu ru yi xi lie zheng shu(shu ru zimu jiesu):\n");
fflush(stdin);
while(scanf("%d",&shu))
{
++count;
if(count==str_len)
{
str_len+=STRLEN;
int *P=NULL;
pzu=(int*)realloc(pzu,str_len*sizeof(int)+1);
if(!pzu)
{
printf("dong tai fen pei shibai!");
exit(1);
}
}
*(pzu+count)=shu;
}
*pzu=count;
*(pzu+count+1)='\0';

return pzu;

}
int main(void)
{
int* zu;
zu=qudu_shuzu();
for(int i=0;i<(*zu+1);i++)
{
if(i%5==0)
printf("\n");
printf("%5d",zu[i]);
}

return 0;
}

书上写着动态分配的内存在使用完毕的时候,一定要释放它。
那像我写的这个函数,什么时候释放呢?
有人能给我讲讲在这个函数中,是怎么样在指针在内存中是怎么工作的吗?
像书上说,函数是在堆栈上创建变量,这个变量随函数结束而销毁。那这个函数中,是在内存池中申请内存。那结合上一句,就说明这个申请的内存显而易见的没有随函数结束而销毁。利用返回的指针,能在找到动态分配的内存地址及其值。那这样的行为算是危险的吗?而且什么时候去释放这个指针?在什么地方释放指针(肯定不能在函数里面,在函数里面销毁就没有返回指针了)?释放哪个指针是主函数中zu这个指针吗?释放这个指针有作用吗?
能给帮忙解释下吗。谢谢!
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-02
  • 打赏
  • 举报
回复
了解一下操作系统的进程管理吧。
醉花阴柳 2015-12-02
  • 打赏
  • 举报
回复
主函数结束自动释放了,zu指向的地址就是申请的内存地址,所以也可以在主函数用完了zu就把zu释放掉
paschen 2015-12-01
  • 打赏
  • 举报
回复
确实没有释放! 可以在主函数最后释放 不过这不是一个好的方式,你可以考虑用类封装或者使用智能指针 通常应该是谁分配内存,谁就负责释放

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧