私はC配列のポインタに詰まっていて、それを引数として関数に渡しています。私は、コードをコンパイルすることができ関数の引数としてのポインタの配列
char *src_filename1 = NULL;
AVFrame *frame = NULL;
AVFrame *frames_video1[3];
AVFrame *frames_video2[3];
int decode_packet(int *got_frame, int cached, AVFrame *frames_video[])
{
...
frames_video[video_frame_count] = frame; //video_frame_count is 2 at the moment
...
}
int main()
{
decode_video(src_filename1, frames_video1);
...
printf("frames_video1[i]->pkt_size: %d\n", frames_video1[i]->pkt_size);
...
}
int decode_video(char *src_filename, AVFrame *frames_video[])
{
...
decode_packet(&got_frame, 0, frames_video);
...
}
が、私はそれを実行したとき、私はこのコンテキストで引数を渡すものとどのようにframes_video1[i]->pkt_size
によって引き起こさセグメンテーションフォールトが発生した:ここでの問題が関与しているコードはありますか?関数の引数としてそれらを使用するときに**特にCHAR * []と文字を扱うとき、私は...私の手はいつも汚れて、見つける
EDIT NEW CODE:(!働く)
char *src_filename1 = NULL;
AVFrame *frame = NULL;
AVFrame frames_video1[3];
AVFrame frames_video2[3];
int decode_packet(int *got_frame, int cached, AVFrame frames_video[])
{
...
AVFrame tmp;
tmp = *frame;
frames_video[video_frame_count] = tmp;
...
}
int main()
{
decode_video(src_filename1, frames_video1);
...
printf("frames_video1[i].pkt_size: %d\n", frames_video1[i].pkt_size);
...
}
int decode_video(char *src_filename, AVFrame frames_video[])
{
...
decode_packet(&got_frame, 0, frames_video);
...
}
私は簡単に古いコードの主な問題を要約しましょう:それは初期化とはほとんど関係がありませんでした。主な問題は、引数として渡すポインタの配列だった、本当に引数をすべて適切に渡すことでした。@SFからの提案を聞いた後。私は、引数をAVFrame * frames_video []からAVFrame frames_video []に変更しました。また、AVFrame frames_video1[]
がdecode_packet
関数によって "正常に"受信されたことを意味します... "配列がポインタへのポインタに溺れてしまうような多くの方法でポインタがポインタとして動作します。実際には、私はまだ非常に実際にどのようにポインタ(特に配列に関連付けられている)が深い意味で動作するか理解していません...
'frames_video1 []'が宣言され、初期化されていません。ですから、 'frames_video1 [i] - > pkt_size'を行うことはできません。 –
@BatCoderであるが、decode_packet関数では、frames_video1の項目はフレームによって割り当てられる。すなわち、frames_video1 [0]はフレームを指し、frames_video1 [1]は他のフレームを指し示す。それらはNULLではありません – Kindermann
"配列ポインタ"または "**ポインタ** ** **の配列**"は大きな違いです! – Olaf