可变长度数组声明的解决方法不能具有静态'错误

时间:2013-09-08 17:19:15

标签: objective-c c arrays

Hello:试图解决上面引用的错误,这需要在静态数组arInterpolateFin的下标声明中使用硬编码整数。

我在ProcessSamples内尝试了局部变量,但仍然收到错误。将成为返回数组的接收者的调用代码对象是本地malloc数组。

有什么建议吗?我想保留这个结构,因为它可以非常快速地处理许多元素。

(SInt16*) ProcessSamples:(SInt16)arBufferRaw : (int) numSamples;
{
    int tmpInt = numSamples
    static SInt16 arInterpolateFin[tmpInt];//4201930

    for (int i = 0; i<(95); i++ )
    {
        arInterpolateFin[tmp1st]=10000;
        tmp1st+=44099;
    }
    return arInterpolateFin;
}

2 个答案:

答案 0 :(得分:3)

见面malloc()static关键字在这里没有任何意义。

SInt16 *arr = malloc(numSamples * sizeof(arr[0]));

当你不再需要它时,不要忘记free()调用者内部返回的指针。

另外,我没有看到tmpInt变量的用途。这只是让代码更难以遵循。

答案 1 :(得分:1)

你写的“将是返回数组的接收者的调用代码对象是本地malloc数组。”这没有意义 - 你将指针返回到静态数组,而不是数组本身。

此外,分配一个永久(static)数组会改变每个函数调用的大小是没有意义的 - C数组在创建时会被赋予一个大小,之后不能更改该大小。

您是否尝试通过调用方法在数组中设置一些初始值?如果是这样,将数组传递给方法:

(void) initProcessSamples:(SInt16 *)arInterpolateFin
{
    int tmp1st = 0; // 0 is just a guess

    for (int i = 0; i < 95; i++)
    {
        arInterpolateFin[tmp1st] = 10000;
        tmp1st += 44099;
    }
    return;
}

HTH