定义了一个智能指针,本想将它存到list中,这样的话,pop_back()的时候就不用再去释放内存了,结果发现问题很多,最后不得不放弃。
std::list<std::shared_ptr<AVFrame>> video_frameList;
std::shared_ptr<AVFrame> tempFrame = std::shared_ptr<AVFrame>(avcodec_alloc_frame(),av_free);
avcodec_decode_video2(is->video_st->codec, &(*tempFrame), &frameFinished,packet);
video_frameList.push_back(tempFrame); //崩溃
里面有几个特殊的地方,本想研究下,时间不允许了,于是还是采用笨的方法了。
AVFrame *pFrame; //这是个C的结构体
它是用avcodec_alloc_frame()申请内存的。
然而之后操作avcodec_decode_video2,会在里面再次申请内存;里面的参数类型也有问题( &(*tempFrame) )
最后释放用av_free(pFrame);
几个纠结的地方凑到一起,我就不想再弄了。纠结了
list insert iterator outside range
几天以后找到原因了,因为这个list的空间是用malloc申请的,而不是new。所以里面没有初始化(这个list是在一个结构体中,这个结构体用的是malloc来申请空间的,找了好久,后来改成了在这个结构体中定义了一个list指针,指向了一个new的list,就正常了)。