为什么此代码不起作用? 我已经通过传递指向函数的指针找到了解决方法,但是我想知道是否有更简单的解决方案?
#include <stdio.h>
int* func() {
int d[3];
for (int f = 0; f < 3; f++)
d[f] = 42;
return d;
}
int main() {
int* dptr;
dptr = func();
printf("Hi\n");
for (int f = 0; f < 3; f++)
printf("%d\n",dptr[f]);
return 0;
}
答案 0 :(得分:3)
使用return d;
,您将返回一个指向局部变量的指针,即函数d
完成后,数组func
的生存时间将结束。之后(通过返回的指针)访问此数组是未定义的行为。
一种简单的解决方案是将d
设置为static
变量,这样其寿命将一直持续到程序结束:
int* func() {
static int d[3];
但是请注意,此变量d
在程序中将仅存在一次,因此一个调用的结果以后可能会更改。考虑使用std::vector<int>
作为返回类型或将要更改的数组作为函数参数void func(int[] d) {
答案 1 :(得分:3)
最简单的解决方法是使用std :: array(这是首选方法)
#include <array>
std::array<int, 3> do_something() {
std::array<int, 3> arr = {1, 2, 3};
return arr;
}
int main() {
do_something()[0];
}
关于此的最佳部分是编译器将就地构建此结构,这意味着不会因复制而损失性能。