奇怪的malloc问题

时间:2012-08-07 22:41:00

标签: c malloc

我正在尝试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));
}

这似乎完全不正确。

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

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

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

并使用一点点数学访问不同的部分

arrayToFill[ x + y * channelCount ];

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