您的位置:首页 > 其它

关于list的的一些问题(未初始化)

2014-04-30 16:18 351 查看
定义了一个智能指针,本想将它存到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,就正常了)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: