objective-c - 返回数组(警告 : Function returns address of local variable)?

标签 objective-c cocoa-touch

返回一个数组(警告:函数返回局部变量的地址)?

界面

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/

相关文章:

objective-c - 将 NSDecimalNumber 转换为 NSString

objective-c - 防止 AlertView 解雇

iphone - 合并音频与视频 Objective-C

iphone - NSPredicate 和 NSRegularExpression

ios - 从给定的 UIImage 创建有色 UIImage

ios - NSURLSessionDataTask 的最大并发实例数

iphone - 如何在临时构建后调试 iPhone 应用程序?

ios - scrollViewWillEndDragging 吸附到 View

objective-c - 保存和恢复自定义对象数组

ios - Cocoa 中文件的内容修改日期