函数返回指向自动变量的指针
function returning a pointer to automatic variable
所以我正在使用一个 "standard" 图书馆,该图书馆在大脑图像 I/O 方面已有十多年的历史。我遇到这个功能:
nifti_image* nifti_image_read( const char *hname , int read_data ){
nifti_image* nim;
...
<<<some IO operations>>>
...
return nim;
}
我的问题是,这个函数怎么会返回一个指向自动变量的局部指针?这种做法不是被禁止的吗,因为 nim 指针超出范围并且应该在函数完成后被删除?
我已经阅读了 this 个问题,但无法得到答案:
它只是返回 nim 指针的值。
在 << 一些 IO 操作 >> 部分,我假设 nim 被设置为指向堆或全局中的某个永久内存。
您没有返回指向局部变量的指针。您正在返回恰好是指针的局部变量的 value。
假设指针没有指向另一个局部变量本身,这是一个安全的操作。
这个函数是returning 存储在指针中的值,没问题。指针值是一个对象的地址,它可能是动态分配的,最后不会被删除,即使它是 C++。唯一可能的问题是指针指向另一个局部变量,而不是动态分配的。因此,即使指针本身超出范围,接收到 return 值的调用方也会获得有效对象地址的副本。
所以我正在使用一个 "standard" 图书馆,该图书馆在大脑图像 I/O 方面已有十多年的历史。我遇到这个功能:
nifti_image* nifti_image_read( const char *hname , int read_data ){
nifti_image* nim;
...
<<<some IO operations>>>
...
return nim;
}
我的问题是,这个函数怎么会返回一个指向自动变量的局部指针?这种做法不是被禁止的吗,因为 nim 指针超出范围并且应该在函数完成后被删除?
我已经阅读了 this 个问题,但无法得到答案:
它只是返回 nim 指针的值。
在 << 一些 IO 操作 >> 部分,我假设 nim 被设置为指向堆或全局中的某个永久内存。
您没有返回指向局部变量的指针。您正在返回恰好是指针的局部变量的 value。
假设指针没有指向另一个局部变量本身,这是一个安全的操作。
这个函数是returning 存储在指针中的值,没问题。指针值是一个对象的地址,它可能是动态分配的,最后不会被删除,即使它是 C++。唯一可能的问题是指针指向另一个局部变量,而不是动态分配的。因此,即使指针本身超出范围,接收到 return 值的调用方也会获得有效对象地址的副本。