今天遇到一个问题,在保存physx的NxShapeDesc时正常,但是load后,出现异常。
//保存时正常
save( &ShapeDesc, sizeof(NxShapeDesc) )
//读取时,vfptr被覆盖,再传递给NxScene创建actor后就会出错
load( &ShapeDesc, sizeof(NxShapeDesc) )
原来是NxShapeDesc使用了虚函数,c++编译器使用一个vfptr保存虚函数的列表,并且总是放在内存的第一个。
这样问题就简单了:只要在load之前保存vfptr的值,load后在改回去就行了