-1

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

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

   nifti_image* nim;
...

<<<some IO operations>>>

...

return nim;
}

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

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

4

3 回答 3

1

它只是返回 nim 指针的值。
在 << some IO operations >> 部分中,我假设 nim 设置为指向堆或全局中的某个永久内存。

于 2017-04-05T20:08:36.270 回答
0

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

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

于 2017-04-05T20:09:40.147 回答
0

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

于 2017-04-05T20:14:42.153 回答