分配内存

xgbing
博客专家认证
2007-05-21 10:24:57
假如我这样写:

typedef char* BUF

BUF p;

p=GetBUF();

.........


BUF GetBUF()
{
BUF tmp;

tmp=(char *)malloc(10);

return tmp;
}

tmp是分配在栈上的,这样写不安全,
要实现这样一个BUF GetBUF()要怎么写?
...全文
188 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgbing 2007-05-21
  • 打赏
  • 举报
回复
谢谢各位,学了很多了
dnboy 2007-05-21
  • 打赏
  • 举报
回复
最好不要这样写,容易忘记释放内存
todototry 2007-05-21
  • 打赏
  • 举报
回复
注意返回值类型BUF与BUF&即可,okokok
todototry 2007-05-21
  • 打赏
  • 举报
回复
什么样不安全呢,
BUF& GetBUF()
{
BUF tmp;

tmp=(char *)malloc(10);

return tmp;
}
这样的不安全,因为返回一局部变量的引用,而局部变量在返回之后已经出栈的
todototry 2007-05-21
  • 打赏
  • 举报
回复
tmp这个指针变量是分配在栈上,但它指的内存,分配在堆上的
tmp在函数返回之后无效了,但是你的返回值是一个值拷贝,外层变量p拿
到了这个值,所以通过p完全可以安全的使用堆内存,记得之后释放
星羽 2007-05-21
  • 打赏
  • 举报
回复
管它什么,类也好 malloc 就是堆上的,记得free 就是了
freshui 2007-05-21
  • 打赏
  • 举报
回复
安全 只要记得适当时候free这块内容即可
bargio_susie 2007-05-21
  • 打赏
  • 举报
回复
木问题。。。
xgbing 2007-05-21
  • 打赏
  • 举报
回复
谢谢,
BUF是一个类的话,也是在堆上的吗?
星羽 2007-05-21
  • 打赏
  • 举报
回复
malloc 堆上的

alloca 栈上的
星羽 2007-05-21
  • 打赏
  • 举报
回复
- -!

堆上的,安全的

69,336

社区成员

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

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