最近用到boost库的serialization模块,之前编译boost时采用默认的选项,而项目中都采用1字节对齐,因此运行时每次都会崩溃。
原因是调用堆栈被破坏,大抵现象是原本正常的对象通过传址经过几层函数调用后就变成无效对象了,
以前也遇到过类似的对象被莫名其妙破坏的情况,于是想到可能是字节对齐问题。
可以用以下方法修改boost编译时的参数:
修改boost_1_XX_X/tools/build/v2/user-config.jam, 添加如下一句话(前两者冒号后分别为版本号和路径),类似的,在后面可以继续添加冒号和其他编译参数
using msvc : 10.0 : "D:/Program Files/Microsoft Visual Studio 10.0/VC/bin/cl.exe" : <compileflags>/Zp1 ;