动态分配内存和函数的问题

xinchangpeng 2009-07-28 07:36:12
自定义一个函数,
函数中定义 double *pp=NULL;
用malloc为pp动态分配了内存pp=(double *)malloc(sizeof(double)*20000);

给 "数组"pp 的元素都赋值
pp[0]=0.2202;
pp[1]=0.3515;
.....
pp[19999]=0.95845;

那么如何返回pp里面的这些值呢?
返回内存地址应该是不行的,因为这里都是局部变量,
因为要多次用到这个函数,所以定义成 全局变量也是不合适的
那么该怎么办呢?
谢谢
...全文
161 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamesjinyongming 2009-07-28
  • 打赏
  • 举报
回复

double *a()
{
double *pp=NULL;
pp=(double *)malloc(sizeof(double)*20000);
pp[0]=0.2202;
pp[1]=0.3515;
.....
pp[19999]=0.95845;
return pp;
}
leizhe 2009-07-28
  • 打赏
  • 举报
回复
返回pp 不要在子函数里面销毁 分配的内存 就行

在主函数里用pp去访问值 在主函数销毁PP
罗嘉贇 2009-07-28
  • 打赏
  • 举报
回复
可以用 static 静态变量啊
  • 打赏
  • 举报
回复
[Quote=引用楼主 xinchangpeng 的回复:]
自定义一个函数,
函数中定义 double *pp=NULL;
用malloc为pp动态分配了内存pp=(double *)malloc(sizeof(double)*20000);

给 "数组"pp 的元素都赋值
pp[0]=0.2202;
pp[1]=0.3515;
.....
pp[19999]=0.95845;

那么如何返回pp里面的这些值呢?
返回内存地址应该是不行的,因为这里都是局部变量,
因为要多次用到这个函数,所以定义成 全局变量也是不合适的
那么该怎么办呢?
谢谢

[/Quote]

返回地址怎么不可以,malloc的堆区的声明周期等效于全局变量的。
直接返回即可,记得不用的时候free掉。
die_angle 2009-07-28
  • 打赏
  • 举报
回复
返回PP是可以的,虽然PP是局部变量,但是PP指的区域在这个函数执行完后是不会放掉的。故你可以返回一个指向这块区域的一个指针,从而可以利用这个指针来操作这一个区域
feilong_1216 2009-07-28
  • 打赏
  • 举报
回复
直接返回PP的指针就可以了,它是动态申请的内存,只能手工利用free函数进行释放,在没有释放之前是可以使用的,不会出现内存问题。
AlwaysSLH 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
返回那个pp指针就OK了
[/Quote]

malloc分配的内存位于堆上,自定义函数退出作用域时进行的栈反解是不会释放堆上的内存的,只要返回这个指针的值就还可以在其他地方访问这段内存
飞天御剑流 2009-07-28
  • 打赏
  • 举报
回复
动态分配的内存的生存期自分配起一直延续到释放为止,即使函数结束调用了也一直存在,不是局部的,你直接返回那个pp就行了。
fandouC 2009-07-28
  • 打赏
  • 举报
回复
动态分配了内存的生命周期是整个程序,所以是可以返回的,你把代码贴出来吧
pengzhixi 2009-07-28
  • 打赏
  • 举报
回复
返回那个pp指针就OK了

69,322

社区成员

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

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