2

我正在尝试 malloc 一个将被访问的浮点 **,arrayToFill[channel][frame] = 0.f;但如果我执行以下代码片段,我只能访问它,否则我会收到错误的访问错误。

arrayToFill = (float **) malloc((frameCount * 2) * sizeof(float *));

for(int i = 0; i < channelCount; i++)
{
    arrayToFill[i] = (float *) malloc(frameCount * sizeof(float));
}

这似乎完全不正确。

4

2 回答 2

4

这似乎应该是这样的:

float **arrayToFill = (float**) malloc(channelCount * sizeof(float*));

for(int i = 0; i < channelCount; ++i)
{
    arrayToFill[i] = (float*) malloc(frameCount * sizeof(float));
}

或者,如果通道数是已知的并且是固定的:

#define CHANNEL_COUNT 2

float *arrayToFill[CHANNEL_COUNT];

for(int i = 0; i < CHANNEL_COUNT; ++i)
{
    arrayToFill[i] = (float*) malloc(frameCount * sizeof(float));
}
于 2012-08-07T22:46:42.820 回答
0

那么如果你只需要一个矩形数组,你可以写

float* arrayToFill = malloc( channelCount * frameCount * sizeof(float) );

只需一点数学即可访问不同的部分

arrayToFill[ x + y * channelCount ];

如果你绝对必须有双下标,或者其中一个维度是可变的,那么你就没有办法摆脱你已经拥有的东西。

于 2012-08-08T08:45:55.497 回答