一个结构体引发的错误

Posted by LuckXiang on August 15, 2016

最近在移植ffmpeg到项目的播放器过程中,遇到一个死机问题,追踪发现结构体的指针是一个奇怪的地址:0x250,这个地址是不正常的,根本不能读写,继续往下跟,包含该指针的结构体是一个函数的参数,这个指针是一个malloc的地址,在函数返回之前,该地址都是正常的,但是返回之后,该地址变成了0x250。由于调试环境特殊,gdb无法使用,导致该问题处理异常困难。后来通过仔细阅读代码,发现是结构体定义导致的,ffmpeg的库是在另一个地方编译的,然后头文件拷贝到项目公共库的时候,结构体的定义被修改了,导致两边编译用到的结构体内容是不一样的。这样在malloc的时候,分配的大小空间实际上是不一样的。地址读错也就正常了。