EMF格式文件,全称为Enhanced Metafile,即增强型图元文件,是微软公司开发的一种32位扩展图元文件格式,SVG是一种更为流行的矢量图文件,使用libemf2svg开源库中的emf2svg-conv将手头的emf文件转换为svg格式,发生段错误
使用gdb查看错误栈,没有看到直接原因
编译Debug版本,即cmake -DCMAKE_BUILD_TYPE=Debug ..,重新gdb查看到错误为
段错误发生在emf2svg_utils.c的1138行代码,原因是分配的内存长度不够gindex,导致访问了未分配内存的地址,即rmap_s自增1000后长度还是不够
解决方法很简单,再增加一个判断,如果gindex还是比rmap_s大,则将gindex+1000赋值给rmap_s,这样realloc分配的内存足够使用,重新编译,再执行emf2svg-conv程序可以正常运行