我正在调用一个返回3D array
的函数。问题是,如果我在函数内部声明数组,它会返回一个悬空指针,因为程序的执行超出了变量的范围。但是当我在函数外部声明数组时,它会给出Error:'array' was not declared in this scope
。我应该如何声明数组?它返回整数类型。
int arr[x][y][z];
int func(list of parameters)
{
//code
return arr;
}
int main()
{
int arr2[x][y][z];
arr2 = func(list of parameters);
return 0;
}
答案 0 :(得分:0)
您尝试返回名为arr
的整数值,但未在函数范围中定义int arr
。
C
不允许按值返回数组 。您需要将指向数组的指针传递给函数,以便让它修改数组。
类似的东西:
void func(int*** array, <list of parameters>)
{
//code
array[1][2][4] = 10;
}
int main()
{
int arr2[x][y][z];
func(arr2, <list of parameters>);
return 0;
}
答案 1 :(得分:0)
代码中的问题很少:
首先,func
函数应返回int***
指针。它被定义为返回int
,它不是您实际返回的类型。
其次,为什么要从arr
重新调整全局func
数组?它只是修改全局数组。
int arr[x][y][z];
int func(list of parameters)
{
//code
return arr;
}
第三,为什么声明arr2来保存结果 - 只需引用你定义的全局数组。
第四,不支持全局定义int arr[x][y][z];
- 编译器不知道如何创建这个缓冲区 - 你应该用数组的实际大小声明它(例如,int arr[10][10][10];
答案 2 :(得分:0)
如果在函数外声明它或者在函数内声明它然后处理悬空指针,则将数组作为参数传递给函数 例如 -
char*func()
{
char str[10];
strcpy(str,"Hello!");
return(str);
}
//returned pointer points to str which has gone out of scope.
或者您可能正在使用正在释放的内存,例如
int *c = malloc(sizeof(int));
free(c);
*c = 3; //writing to freed location!