函数返回指向自动变量的指针

时间:2017-04-05 20:06:04

标签: c memory-management stack automatic-storage

所以我正在使用"标准"具有超过十年历史的脑图像I / O库。我遇到了这个功能:

   nifti_image* nifti_image_read( const char *hname , int read_data ){

   nifti_image* nim;
...

<<<some IO operations>>>

...

return nim;
}

我的问题是,为什么这个函数返回一个指向自动变量的本地指针?是不是禁止这种做法,因为nim指针超出范围并且在完成功能后应该被删除?

我已经阅读了this个问题,但无法得到答案:

3 个答案:

答案 0 :(得分:1)

它只是返回nim指针的值 在&lt;&lt;&lt;&lt;&lt;一些IO操作&gt;&gt;第一部分假设nim设置为指向堆中的某个永久内存或全局内存。

答案 1 :(得分:0)

您没有返回指向局部变量的指针。你正在返回一个恰好是指针的局部变量的

假设指针本身没有指向另一个局部变量,这是一个安全的操作。

答案 2 :(得分:0)

此函数返回存储在指针中的值,即可。指针值是一个对象的地址,它可能是动态分配的,并且最后不会被删除,即使它是C ++。唯一可能的问题是指针指向另一个局部变量而不是动态分配的情况。因此,即使指针本身超出范围,接收返回值的调用者也会获得有效对象地址的副本。