为了调试,我装了BoundsChecker,发现无论在Debug下运行什么代码,Output都会提示first-chance Exception in GDI32.dll(或者kernel32.dll) at 0xC0000005,Access violation,而且有若干处内存泄漏,都是在VC6自带的*.cpp中,就连微软的MFC Sample 也是如此!而且同时出现若干处API Failure。几乎所有的与绘图有关的Code都会出现ReleaseDC invalid argument.但是在开发环境外运行
Debug版较为正常(不会出现非法操作之类的) 真是奇怪啊!我用的是Win98.
这是为啥?有哪位大虾能指点一下吗?

解决方案 »

  1.   

    这个你不用管它。bc的运行机制是一个类似API Hook的东东,它钩住你所有的申请资源的函数和释放资源的函数,譬如new/delete运算符、Alloc/Free函数族等等,对每块申请的内存,和申请的资源——比如GDI资源作标记。程序关闭的时候,再次检查这些登记的资源有没有被释放。但是bc这样作还是有局限性,比如在dll里申请,在exe里释放,就可能会误报。还有windows本身的一些分配资源操作它也不一定能完全拦截到。
    一般来说,只有出现在你自己的cpp文件里的memory leak,必须要消除。
      

  2.   

    bc对null参数也会报警,呵呵,忽略
      

  3.   

    大家注意,这个first-chance Exception in GDI32.dll(或者kernel32.dll) at 0xC0000005,Access violation错误不是BC报的,而是出现在VC的调试信息OUTPUT窗口,是VC报的!内存泄露BC会报。
    这个问题我以前碰到过,是在WIN2000下,有一次不知装了什么东东,后来分析有可能是OFFICE XP,原来好好的程序一DEBUG就出现first-chance Exception in GDI32.dll(或者kernel32.dll) at 0xC0000005,Access violation,内存泄露倒不会报,因为原来就没有,虽然程序单独运行没问题,但DEBUG的时候看着下面那一大堆错误真不爽,后来是卸载那天装的所有程序,又重装系统才解决的,没搞清什么原因。程序始终好好的没改。
      

  4.   

    是啊,如果不选中Debug with BoundsChecker,有时候就不会出现First-chance Exception...
    Access violation了,这是怎么搞的?