在 C 中创建指向结构的指针的动态数组



我有如下代码,工作正常:

AVFrame *frame = NULL;
open_input(&frame);

其中open_input的输入参数类似于:AVFrame **frame;

现在,我想扩展此代码以处理帧数组(例如,N 帧)。我尝试了以下代码,但我的代码在 MingW 中被 gcc 编译后停止工作:

int i, N = 3;
AVFrame **frame;
frame = (AVFrame *) malloc(N * sizeof(AVFrame *));
for(i=0;i<N;i++){
   frame[i] = (AVFrame *) malloc(sizeof(AVFrame));
   open_input(&frame[i]);
}

你知道,问题出在哪里吗?

如果你想分配一个帧数组,你可以简单地做

AVFrame *frame = malloc(N * sizeof(*frame));

使用 frame[index] 访问每个元素

仅当您需要 AVFrame 数组数组时,才需要指向指向AVFrame的指针的指针。

您可能

应该将frame[i]传递给open_input而不是&frame[i]

我也认为:

frame = (AVFrame *) malloc(N * sizeof(AVFrame *));

应该是

frame = (AVFrame **) malloc(N * sizeof(AVFrame *));

我本以为你的编译器也可能对此发出警告。

如果尚未执行此操作,请打开编译器上的警告级别(可能是编译器上的/Wall),并处理结果。

&frame[i]的类型为 AVFrame ** 。看来open_input期待AVFrame *型的论点.
改变

open_input(&frame[i]);  

open_input(frame[i]);   

这里frame[i]是类型 AVFrame * .

并且也不强制转换malloc的返回值。

相关内容

  • 没有找到相关文章