alloca的内存泄漏

来源:互联网 发布:2017淘宝新店怎么做 编辑:程序博客网 时间:2024/06/02 04:46

忘了从什么时候开始,不喜欢在堆上分配内存空间,这种内存需要自己手动释放。原以为使用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 0
原创粉丝点击