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;
}
答案 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