1

基本上我有一个类方法返回一个float array. 如果我返回 astatic array我会遇到它太大或什至可能太小的问题,具体取决于输入参数,因为所需数组的大小取决于输入大小。如果我只返回一个float array[arraysize]我已经解决了尺寸问题,但我还有其他问题。

比如说,我分别处理每个元素,non-static float array例如

    NSLog(@"array[0] %f array[1] %f array[2] %f",array[0],array[1],array[2]);

它打印数组的正确值。但是,如果我改为使用循环,例如

    for (int i = 0; i < 3; i++) 
 {
    NSLog(@"array[%i] %f",i,array[i]);
 }

我得到了一些非常奇怪的数字(奇怪的是,除了最后一个索引)。为什么这两件事会产生不同的结果?我知道简单地返回 a 是不好的做法non static float,但即便如此,这两种寻址数组的方法对我来说看起来是一样的。

类方法的相关代码(用于非静态版本)...

    float array[arraysize];

    //many lines of code later

    if (weShouldStoreValue == true) {
         array[index] = theFloat;
         index = index + 1;
     }

    //more lines of code later

    return array;

请注意,它返回一个 (float*)。

4

1 回答 1

0

你不能这样做,当你退出方法或函数范围时,数组会死掉。
您可以在纯 C 中使用 malloc 执行此操作:

float* array= malloc(arraysize*sizeof(float));

//many lines of code later

if (weShouldStoreValue == true) {
     array[index] = theFloat;
     index = index + 1;
 }

//more lines of code later

return array;

不要忘记释放相关的内存。
如果您习惯使用垃圾收集器并且不关心内存,请将 malloc 的数据包装到 NSData 对象中,以便将其释放,使用如下方法进行分配:

+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)freeWhenDone;
// Pass YES to the freeWhenDone argument

但是此时为什么不使用 NSMutableArray 的数字呢?

于 2012-12-04T11:06:33.693 回答