gpt4 book ai didi

c++ - 如何确保从函数返回指针是安全的

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:25 25 4
gpt4 key购买 nike

这是我的问题:我在 StackOverflow 上读到,有时从函数返回指向局部变量的指针是不安全的。例如:

#include<iostream>

using namespace std;

int *foo(void) {
int x[] = {1,2,3};
return x;
}

int main() {
int *numbers;
numbers = foo();
return 0;
}

我想知道这是否不安全,考虑到 x 是本地数组,内存可能未分配,实现相同结果的更好方法是什么?

最佳答案

I read here on StackOverflow that it is unsafe sometimes to return pointers to local variables from a function.

返回指向局部变量的指针总是是不安全的。这样做确实是错误的,使用这个指针会导致未定义的行为。另见 this awesome post .

如果你想将数据返回到调用范围,你可以使用 std::vector作为拷贝:

std::vector<int> foo(void){
std::vector<int> x = {1,2,3}; // using C++11 initializer list
return x;
}

如果它是一个固定长度的数组(总是大小为 3),你可以使用 std::array相反。


根据您的要求,您还可以使用静态变量。也就是说,变量永远不会超出范围,s.t.您可以通过引用(或指针)安全地返回它。请注意,您只有一份拷贝。如果您修改它,它将保持修改状态。 (如果它是只读的,让它成为 const &。)

std::vector<int>& foo(void) {
// this is only instantiated once when the function is first called
static std::vector<int> x = {1,2,3};
return x;
}

关于c++ - 如何确保从函数返回指针是安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com