[ffmpeg][goav][issues] goav Dictionary crash double free

[ffmpeg][goav][issues] goav Dictionary crash double free

用goav 配置avoption时的一个bug
github.com/giorgisio/goav/issues/57

code :

	var dict *avutil.Dictionary = &avutil.Dictionary{}
	er := dict.AvDictSet("profile", "main", 0)
	if er < 0 {
		log.Critical("AvDictSet failed")
		return 
	}
	er = dict.AvDictSet("level", "51", 0)
	if er < 0 {
		log.Critical("AvDictSet failed")
		return 
	}
	fmt.Println(dict.AvDictCount())
	fmt.Println(dict.AvDictGet("profile", nil, 0))
	fmt.Println(dict.AvDictGet("level", nil, 0))

	err = context_enc.AvcodecOpen2(codec_enc, (**avcodec.Dictionary)(unsafe.Pointer(&dict)))
	if err < 0 {
		log.Critical("AvcodecOpen2 failed.")
		return
	}

double free or corruption (out)
SIGABRT: abort
PC=0x7f3a6082aed7 m=0 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7f3a6082aed7
stack: frame={sp:0x7fff8f1abb70, fp:0x0} stack=[0x7fff8e9ad228,0x7fff8f1ac250)
00007fff8f1aba70: 0000000000000000 000000000227fbc0
00007fff8f1aba80: 00000000ffffffff 00007fff8f1abae8
00007fff8f1aba90: 00007f3a60cc3030 00007f3a623509f0
00007fff8f1abaa0: 00007f3a60cc5c25 0000000000000017

根本原因应该是没有dict.h里面没有AVDictionary的定义,添加一个alloc函数可以解决这个问题。
(./1572499802638.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnQ0gC6z-1572500193455)(./1572500171616.png)]

然后这样分配dict空间:

	var dict *avutil.Dictionary = avutil.AvDictAlloc()
	er := dict.AvDictSet("profile", "constrained_baseline", 0)
	if er < 0 {
		log.Critical("AvDictSet failed")
		return 
	}
	er = dict.AvDictSet("level", "52", 0)
	if er < 0 {
		log.Critical("AvDictSet failed")
		return 
	}

	fmt.Println(dict.AvDictCount())
	//fmt.Println(dict.AvDictGet("profile", nil, 0))
	//fmt.Println(dict.AvDictGet("level", nil, 0))
	//dict.AvDictFree()

	err = context_enc.AvcodecOpen2(codec_enc, (**avcodec.Dictionary)(unsafe.Pointer(&dict)))
	if err < 0 {
		log.Critical("AvcodecOpen2 failed.")
		return
	}
	fmt.Println(dict.AvDictCount())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值