编译直接打印Segmentation fault

来源:5-8 FFmpeg打印音视频Meta信息

xiongliang120

2018-09-27

写回答

2回答

xiongliang120

提问者

2018-09-28

#include<libavformat/avformat.h>
#include<libavutil/log.h>
int main(int argc,char * argv[])
{
  AVFormatContext *fmt_cxt;
  int ret;
  av_log_set_level(AV_LOG_INFO);
  av_register_all();

  ret = avformat_open_input(&fmt_cxt,"./a.ts",NULL,NULL);
  if(ret<0)
  {
     av_log(NULL,AV_LOG_INFO,"read fail");
     return -1;
  }

  av_dump_format(fmt_cxt,0,"./a.ts",0);
  avformat_close_input(&fmt_cxt);
  return 0;

}

0
2
李超
回复
xiongliang120
一般好的习惯是在设置指针变量时,给它设置为NULL。但对于你这个程序来说也是不必的。因为avformat_open_input(&fmt_cxt,"./a.ts",NULL,NULL); 执行后,会给 fmt_cxt一个新的值。但后面使用时,你需要对 fmt_cxt做判空处理。如果该值为空,此时你再调用下面的 avformat_close_input(&fmt_cxt); 时就会 crash。其实最好的解决这个问题的方法是使用 gdb/lldb单步调试一下。一下就可以确定问题的原因了。你这个程序在我这里编译,运行都是没问题的。谢谢!
2018-09-28
共2条回复

李超

2018-09-28

把你的程序贴出来哈,否则我无法判断是什么问题。

0
0

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2726 学习 · 814 问题

查看课程