alloca的内存泄漏

忘了从什么时候开始,不喜欢在堆上分配内存空间,这种内存需要自己手动释放。原以为使用alloca在栈上分配空间,程序就自动释放了,但还有些细节要注意。
最近使用QNX的PPS服务做IPC通信,pps decoder系列的接口都是传入指针,但decoder只有初始化init接口,而没有create接口。init接口要事先分配出decoder使用的空间。通常,最简单的做法就是定义一个局部变量,然后取地址传入后续的接口,但我嫌麻烦,每个参数都要多写个&,这对于惜字如金的我可不舒服(同理,再定义个指针指过去也不爽)。于是,就直接定义个指针再通过alloca在栈空间分配,之后直接用这个指针就行了,也不用主动释放。
由于代码存在无限循环,我在内层按照以上思路实现,结果程序运行一会儿就挂了,GDB也跟不出问题(栈乱了)。想了很久才发现,自己对alloca的理解有问题,man alloca提示:

DESCRIPTION
   The  alloca()  function  allocates  size  bytes of space in the stack frame of the caller.  This temporary space is automatically freed when the function that called alloca() returns to its caller.

RETURN VALUE
   The alloca() function returns a pointer to the beginning of the allocated space.  If the allocation causes stack overflow, program behavior is undefined.

这里明确说明,alloca的内存在函数退出时释放,所以,我使用alloca也内存泄露啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值