我有如下代码,工作正常:
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
的返回值。