这几天在查找一个动态链接库使用的问题,这个动态链接库的功能时提供序列化和反序列化的功能。
dll接口如下:
int UnSerialize(const char* filename, SerializeClass& object);
其中object就是要反序列化的 对象,filename是要反序列化的数据文件。在我实际使用中 object中是有指针成员的,而且指针成员所指类型还有指针。当在客户端调用反序列化方法后发现object中的指针成员已经有值了 但是指针所指数据并不显示。
当时情况如下:
通常这样的情况会认为指针不正常,指针可能是野指针,并不拥有指针所指内存。此时current 虽然有值,但是并没有解析出这块地址中的数据。老板就是看到这样的指针来找我说我的dll有问题。我一开始也是很疑惑。因为同样的dll链接库在另一个我之前写的工程中是正常运行的。开始我以为工程配置哪里除了问题。然而最终我发现很奇怪的现象。就是在序列化函数试用一下f_tree这对象,f_tree中的指针所指数据就能看看到了。如下:
可以看到current指针所指内存中有data对象,data里面有fileName变量。
总结,是不是很奇怪,有哪位看官知道原因请不吝赐教,我只发现了显现,对本质一无所知。
动态链接库给传入指针赋值,调试时有可能调试器会欺骗你。
最新推荐文章于 2024-01-20 15:02:25 发布