gpt4 book ai didi

c++ - 为什么 C++ 中函数指针返回的数据过期并且无法访问数组的所有元素?

转载 作者:行者123 更新时间:2023-11-30 00:52:04 24 4
gpt4 key购买 nike

当我在下面编译时,只有第一个“cout”工作正常。

void * functionname()
{
int i[3]={1,2,3};
int *p = i;
return p;
}

int main()
{

int *p = new int[3];
p= (int *)functionname();

std::cout<<p[1]<<"\n";
std::cout<<p[1]<<"\n";
std::cout<<p[2]<<"\n";
std::cout<<p[2]<<"\n";
std::cout<<p[3]<<"\n";
std::cout<<p[3]<<"\n";
delete [] p;
return 0;
}

你能说说是什么问题吗?

最佳答案

数组i是函数的局部。当函数返回时它会死掉,给你留下一个悬垂的指针。最好返回 std::array .

std::array<int, 3> functionname()
{
return std::array<int, 3>{{1,2,3}};
}

这样,调用者就得到了数组的拷贝,就没有问题了。在您开始担心复制的成本之前,请注意编译器通常会省略拷贝,因此只会创建一个数组。

如果您需要访问底层数据 block ,您可以使用 theArray.data()&theArray[0] .这些为您提供指向第一个元素的指针。

注1:如果你没有C++11支持,你可以使用std::tr1::array来自 <tr1/array> header 。如果没有,请查看 boost::array ,或推出您自己的数组类。

注意 2:如果您想要一个大小仅在运行时已知的数组,请使用 std::vector相反。

关于c++ - 为什么 C++ 中函数指针返回的数据过期并且无法访问数组的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19995302/

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