仅在调试模式下的FFMPEG异常

时间:2015-09-28 09:20:39

标签: c++ visual-studio exception visual-studio-2012 ffmpeg

所以我试图在c ++中使用ffmpeg。我的代码是这样的:

#include <iostream>

extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"

}

using namespace std;
#pragma comment(lib, "dev/lib/avcodec.lib")
#pragma comment(lib, "dev/lib/avformat.lib")
#pragma comment(lib, "dev/lib/swscale.lib")

int main()
{
    avcodec_register_all();
    av_register_all();
    char inputFile[] = "video.mp4";
    AVFormatContext *pFormatCtx;

    if (avformat_open_input(&pFormatCtx, inputFile, NULL, 0) != 0) // exception occurs here
    {
        cout << "could not open file"; 
        return -1;
    }

}

此代码在发布模式下运行,但在调试模式下,我在avformat_open_input处获得异常:

  

0x0000000074BC3C35(avformat-55.dll)中的未处理异常   ingrain.exe:0xC0000005:访问冲突读取位置   0xFFFFFFFFFFFFFFFF。

我直接从ffmpeg网站下载了dll和lib,并将它们包含在我的visual studio 2012项目中。

提前感谢。

1 个答案:

答案 0 :(得分:4)

阅读documentation

int avformat_open_input ( AVFormatContext ** ps,
                          const char * filename,
                          AVInputFormat * fmt,
                          AVDictionary ** options 
                        )   
  

参数

     

ps:指向用户提供的AVFormatContext的指针(由   avformat_alloc_context)。可能是NULL的指针,在这种情况下是   AVFormatContext由此函数分配并写入ps。   请注意,用户提供的AVFormatContext将在失败时释放。

您尚未初始化pFormatCtx,要么使用avformat_alloc_context进行分配,要么将其设置为nullptr,以便avformat_open_input自动分配error