使用gdb看到崩溃内容:
#0 __memcpy_avx_unaligned ()
at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:273
273 ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S: 没有那个文件或目录.
[Current thread is 1 (Thread 0x7fb6e17fe700 (LWP 18977))]
(gdb) backtrace
#0 __memcpy_avx_unaligned ()
at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:273
另外一组:
#0 __strcpy_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:605
605 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: 没有那个文件或目录.
(gdb) backtrace
#0 __strcpy_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:605
意思还是很明显的,内存对齐出了问题。直接原因是在一个构造器中使用了memset(0)。怎样避免?吾转换bmp的时候也遇到过(测试通过的C代码:平台无关的RGB保存为BMP格式的图片)。语法如下:
/** 必须对齐,所以用这个来对齐 */
#pragma pack(1)
可惜的是,吾试了并没有解决。以后再仔细查。