用VC5.0写了一个监控程序,需要长时间运行,可是程序在运行10个小时左右,就会出现下面的问题,而退出,如何解决呀?急用,万分感谢!!
点击取消,进入调试状态,可是查看Call Stack Window,里面没有我所写的程序部分,而是有我程序调用的DLL,和系统的DLL,你们说这是我的程序的问题,还是我所调用的DLL的问题呀?MyGui.exe - 应用程序错误: "0x10215d03" 指令引用的 "0x04866c28" 内存。该内存不能为 "read"。要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
点击取消,进入调试状态,可是查看Call Stack Window,里面没有我所写的程序部分,而是有我程序调用的DLL,和系统的DLL,你们说这是我的程序的问题,还是我所调用的DLL的问题呀?MyGui.exe - 应用程序错误: "0x10215d03" 指令引用的 "0x04866c28" 内存。该内存不能为 "read"。要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
这中错误只能慢慢调试,还得看经验。
2、如何写LOG文件呀?
3、调用的一些动态库不是我写的,你们说是不是可能这个地方出了问题,按说也不应该对吗?这个平台原先运行的挺好的,我的程序就是在这个平台之上的一个应用程序。
4、如何具体查到
另外还有可能你的进程内存并没有增加但是整个机器使用的内存确增加了,这可能是COM里面的内存泄漏.
碰上这种问题,只能祝你好运了!
查找new 的是否delete!
alloc的是否free!
不管在什么情况下,逐一调用dll的输出,以及各种情况
特别是在OnDraw,OnPaint中的各种DC句柄。
不要等要选择“取消”了再调试
那时候已经晚了
先设置好断点进行调试啊
范围先大一点,然后逐渐夹
用Call stack窗口观察指针变量
一、内存没有及时释放。(楼上的兄弟已经不错的办法)。
二、监控程序的条件分支可能有你测试没有走到的地方,而在这些分支下,你引用了已经被释放了的内存块或变量。
三、可能是数组(可能是数字,最可能的是字符数组)引用超界了。
四、可能dll出错了,但这种情况少见。如果项目不大的话,你可以打包一下,请大家调试一下,也是一种可行的方法了。