返回一个数组(警告:函数返回局部变量的地址)?
界面
int* decimalConversion(int iX);
实现
int* decimalConversion(int iX){
int iMult[10] = {0,0,0,0,0,0,0};
...
return iMult; // <-- Warning: Function returns address of local variable
}
最佳答案
您应该为数组分配空间,如果您在该函数中使用 C,则返回在堆栈上创建的数组的地址(因此出现局部变量警告)如果不使用 obj,则使用 malloc(my_arr_size) -c 的分配。
例子:
int *my_arr = calloc(10, sizeof(int)); //make sure we get zeroed memory
//fill array
return my_arr; //should no longer give a warning
完成后只需使用与 release 相同的 free(my_arr)。我在 C 中这样做的原因是因为我可以看到您正在返回一个 int* 类型并使用 C 样式声明,所以如果您在 Obj-c 中这样做,请告诉我,我可以更改我的答案示例。
您收到此错误的原因是本地数组被放入堆栈,当您返回该数组时,您会返回堆栈帧中的地址。问题是,当该方法完成执行时,该堆栈框架不再有效,因此您不能指望该框架上的任何数据都是有效的(尽管在某些情况下这确实有效,但它被认为是不好的做法)。通过在堆上分配该数组,您可以返回一个堆地址,确保您的数据存在,直到您在指向该数据的指针上调用 free()。
关于objective-c - 返回数组(警告 : Function returns address of local variable)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804176/