用VC5.0写了一个监控程序,需要长时间运行,可是程序在运行10个小时左右,就会出现下面的问题,而退出,如何解决呀?急用,万分感谢!!
点击取消,进入调试状态,可是查看Call Stack Window,里面没有我所写的程序部分,而是有我程序调用的DLL,和系统的DLL,你们说这是我的程序的问题,还是我所调用的DLL的问题呀?MyGui.exe - 应用程序错误: "0x10215d03" 指令引用的 "0x04866c28" 内存。该内存不能为 "read"。要终止程序,请单击“确定”。
要调试程序,请单击“取消”。

解决方案 »

  1.   

    这可不好查啊!Call stack什么样?有可能栈里边的buffer溢出,覆盖返回地址,然后一塌糊涂...
      

  2.   

    点击取消开始调试啊,看看Call Stack,找出出错的函数位置啊,再具体分析啊。
    这中错误只能慢慢调试,还得看经验。
      

  3.   

    很可能是地址越界了,慢慢查吧,把你的数组定义都扩大一下再看看会不会重现此 bug
      

  4.   

    90%的可能是内存泄漏了,用BoundsChecker检查一下吧!
      

  5.   

    在程序中写log文件,出错后根据log文件内容判断可能出错的原因
      

  6.   

    1、长时间运行后观察内存并没有增加,应该不会是内存泄露吧?
    2、如何写LOG文件呀?
    3、调用的一些动态库不是我写的,你们说是不是可能这个地方出了问题,按说也不应该对吗?这个平台原先运行的挺好的,我的程序就是在这个平台之上的一个应用程序。
    4、如何具体查到
      

  7.   

    内存增加有两个地方,一是看任务管理器的"进程"页,你的进程没有增加内存.
    另外还有可能你的进程内存并没有增加但是整个机器使用的内存确增加了,这可能是COM里面的内存泄漏.
      

  8.   

    既然是监控程序,就是可能在某种特定情况下,程序的某部分才得以运行,如果写log的办法不行的话,那么先把可能调用的部分分别测试一下。
      

  9.   

    懒得写log文件的话,用TRACE语句输出调试信息看看吧。
    碰上这种问题,只能祝你好运了!
      

  10.   

    做两项工作,在调用所有的指针时先判断它是不是NULL,检查你代码中所有的delete 方法,看有没有删除一些溢出的指针。
      

  11.   

    是有缓冲溢出!
    查找new 的是否delete!
    alloc的是否free!
      

  12.   

    缓存溢出,检查memcpy之类的函数
      

  13.   

    问题应该在程序调用dll时发生的错误,建议尽可能详细的测试整个dll的调用
    不管在什么情况下,逐一调用dll的输出,以及各种情况
      

  14.   

    检查一下哪些句柄没有被释放。
    特别是在OnDraw,OnPaint中的各种DC句柄。
      

  15.   

    建议尽可能详细的测试整个dll的调用
      

  16.   

    多半是指针问题
    不要等要选择“取消”了再调试
    那时候已经晚了
    先设置好断点进行调试啊
    范围先大一点,然后逐渐夹
    用Call stack窗口观察指针变量
      

  17.   

    如果是监控程序的话,可能引起的原因是:
    一、内存没有及时释放。(楼上的兄弟已经不错的办法)。
    二、监控程序的条件分支可能有你测试没有走到的地方,而在这些分支下,你引用了已经被释放了的内存块或变量。
    三、可能是数组(可能是数字,最可能的是字符数组)引用超界了。
    四、可能dll出错了,但这种情况少见。如果项目不大的话,你可以打包一下,请大家调试一下,也是一种可行的方法了。
      

  18.   

    将编译改为“4”级警告,再用BounderCheck查那里有内存泄露。