Kri*_*son 4 cocoa-touch objective-c
返回一个数组(警告:函数返回局部变量的地址)?
接口
int* decimalConversion(int iX);
Run Code Online (Sandbox Code Playgroud)
履行
int* decimalConversion(int iX){
int iMult[10] = {0,0,0,0,0,0,0};
...
return iMult; // <-- Warning: Function returns address of local variable
}
Run Code Online (Sandbox Code Playgroud)
Jes*_*mos 12
您应该为数组分配空间,如果您在该函数中使用C,则返回在堆栈上创建的数组的地址(因此是局部变量警告)如果不使用obj-c的alloc,则使用malloc(my_arr_size) .
例:
int *my_arr = calloc(10, sizeof(int)); //make sure we get zeroed memory
//fill array
return my_arr; //should no longer give a warning
Run Code Online (Sandbox Code Playgroud)
完成后,只需使用free(my_arr)和release一样.我在C中做到这一点的原因是因为我可以看到你正在返回一个int*类型并使用C样式声明,所以如果你在Obj-c中这样做,请告诉我,我可以改变我的答案的例子.
您收到此错误的原因是因为本地数组被放入堆栈,当您返回该数组时,您将返回堆栈帧中的地址.问题是,当该方法完成执行时,堆栈帧不再有效,因此您不能指望该帧上的任何数据有效(尽管有时这种方法有效,但它被认为是不好的做法).通过在堆上分配该数组,您可以返回一个堆地址,确保数据存在,直到您对指向该数据的指针调用free().
| 归档时间: |
|
| 查看次数: |
4130 次 |
| 最近记录: |