问题描述:
win7, Vs2010, 使用ffmpeg api做开发, debug版本运行正常,切换到release时,出现一些内存越界的异常,类似 "0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a4d 时发生访问冲突",
单独写个小的测试, 只调用一个ffmpeg 函数, debug版本运行ok, release版本直接崩溃
测试小程序: 【注, 头文件和库依赖均配置好】
#include <stdio.h>
extern "C"{
#include "libavutil/time.h"
};
int main(int argc, char *argv[]){
printf("hello world!, 当前时间:%d\n", av_gettime());
return 0;
}
网上解决方法:
修改配置, 链接器->优化->引用, 在release版本下面使用"保留未引用数据(/OPT:NOREF)"选项
分析瞎猜:
来看vs2010中此项的默认配置, release是删除从未使用过的函数或数据, debug此配置项为空, 如果将debug版也置成删除, 也会崩溃
猜测, ffmpeg函数量庞大, vs不够智能,配置引用删除选项后, 会误删有用的函数或数据, 导致程序崩溃