关于实际项目中C++(MFC)指针问题的解决过程
2013-04-26 14:27
716 查看
1、程序结构是主程序与插件(DLL模式)。主程序提供接口让DLL得到主程序某个类实例(用户数据)的指针,并且是只读模式。不允许删除此指针,所以发布给DLL的此类的头文件没有析构函数。如代码所示。
问题是这样的,工程师在写程序过程中,在卸载某一接件dll时把从主框架中得到的用户数据指针给删除了。
a,由于暴露给DLL的接口没有提供析构函数,所以在插件中delete此指针时,不会调用析构函数。在析构函数里加断点,程序不会执行到,给程序排错制造了困难。
b,此实例已经被删除,但内存块未被重新分配前,所有的内容操作不会报错。当程序报错时,断点所示的地方很难联想到是用户数据实例被删除引起的。
c,解决过程是,通过调试观察内存发现,用户数据指针所指的区域在某个插件卸载后变为fe ee fe ee,根据经验,这是被delete的结果,之后就找到问题所在了。
2、主程序与收发线程。启动收发线程时将主程序建立的Session指针传给收发线程。注销后,Session重新建立,delete后重新new。收发线程也是重新建立,但用的Session指针还是原来被删除的指针,导致问题发生。
a,Session指针已经被删除,但内存块未被重新分配给其它指针前,所有的内存操作不会报错。当程序报错时,断点所示的地方很难联想到是指针被删除引起的。
b,通过调试发现,收发线程里Session的指针所指向的地址没变后,知道问题之所在。
class IUserData { public: virtual CString GetName() = 0; virtual CString GetUserId() = 0; virtual CString GetPrivatePath() = 0; virtual CString GetDepartId() = 0; virtual const CMapStringToString& GetModuleMap() = 0; };
问题是这样的,工程师在写程序过程中,在卸载某一接件dll时把从主框架中得到的用户数据指针给删除了。
a,由于暴露给DLL的接口没有提供析构函数,所以在插件中delete此指针时,不会调用析构函数。在析构函数里加断点,程序不会执行到,给程序排错制造了困难。
b,此实例已经被删除,但内存块未被重新分配前,所有的内容操作不会报错。当程序报错时,断点所示的地方很难联想到是用户数据实例被删除引起的。
c,解决过程是,通过调试观察内存发现,用户数据指针所指的区域在某个插件卸载后变为fe ee fe ee,根据经验,这是被delete的结果,之后就找到问题所在了。
2、主程序与收发线程。启动收发线程时将主程序建立的Session指针传给收发线程。注销后,Session重新建立,delete后重新new。收发线程也是重新建立,但用的Session指针还是原来被删除的指针,导致问题发生。
a,Session指针已经被删除,但内存块未被重新分配给其它指针前,所有的内存操作不会报错。当程序报错时,断点所示的地方很难联想到是指针被删除引起的。
b,通过调试发现,收发线程里Session的指针所指向的地址没变后,知道问题之所在。
相关文章推荐
- 关于MFC CFileDlg使用,析构时访问空指针崩溃问题的解决办法
- 关于C++项目指针对象未被初始化的问题(0xcdcdcd)
- 关于C++项目指针对象未被初始化的问题(0xcdcdcd)
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 项目过程中,有c++控件,层级问题的解决
- 关于创建MFC项目发生当前页面脚本发生错误(691)的问题解决
- 关于在VS中调试Unity项目的解决过程和遗留问题
- 关于安装linux redhat后无法使用yum命令安装gcc-c++问题的解决过程
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 【转】C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- C++中的关于指针的问题
- 运用“孤独九剑”解决项目实际问题(二)
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- vc2005编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 关于CUDA C 项目中“ error C2059: 语法错误:“<” ”问题的解决方法
- Sharepoint项目周记一:关于开展MOSS项目的前期调查和需要解决的问题
- 关于意外宕机导致VS读取项目出错的各种问题解决方案
- UE4 虚幻4 C++项目Complile Failed问题的解决方法
- [笔试题 2][c/c++]关于指针直接赋值问题