我试着写了一个小的SDI程序,图形编辑吧.其中在VIEW类中用了一个 BYTE* 的成员变量(m_pBits), 使用new 和 delete 来分配内存,问题出现了.当我的程序在显示器32位真彩下运行时,正常,为了测试健壮性,我改到16位增强色下测试时,程序运行到delete部分就出错了,请问这是为什么? 
Debug状态下跟踪到最后,提示给的是:"User breakpoint called from code at 0x.." (0x..为16位内存地址吧.) 我查了断点清单,我没有设任何断点在这个程序里.我所能说明的就这么多了,请高手尽量给以解答,如果对我的表述还有不清楚的地方,也请回应指出,我会进一步说明.多谢!!

解决方案 »

  1.   

    用DEBUG WINDOW中的WATCH窗口上的CONTEXT看看调用的顺序,以及最后是停在哪里了,不一定是delete错.
      

  2.   

    不是很清楚你的意思,关于调用顺序,我看了context里的东东,没觉得有什么不妥(以我的观点),第二,我试着换了换delete到不同的函数位置,因为是成员变量,所以加了条件判断的话应该只要在new之后使用就应该没什么问题(我这个假设不知道对不对),结果仍然在delete这里出问题。第三,你所谓停在哪里如果指的是汇编的话我就没招了,看到汇编代码我就头大,如果就是C++代码,我现在看到的就是停在delete这里了。
    能有进一步的解释吗?
      

  3.   

    不是很清楚你的意思,关于调用顺序,我看了context里的东东,没觉得有什么不妥(以我的观点),第二,我试着换了换delete到不同的函数位置,因为是成员变量,所以加了条件判断的话应该只要在new之后使用就应该没什么问题(我这个假设不知道对不对),结果仍然在delete这里出问题。第三,你所谓停在哪里如果指的是汇编的话我就没招了,看到汇编代码我就头大,如果就是C++代码,我现在看到的就是停在delete这里了。
    能有进一步的解释吗?
      

  4.   

    会不会你的程序逻辑有问题,在此之前m_pBits已经被删除了,或者干脆拥有此成员的类对象已经不存在了。
      

  5.   

    逻辑不会有问题,我仔细看过,没有事先删除这个指针.类对象也一直存在.至于zhaolaoxin网友说的内存大小变化,我在别的地方没有改变过它的大小.我想关键可能还是为什么在32位和16位下会有这样的不同吧,在32位下绝对没有错误.
    多谢!
      

  6.   

    这样看起来是你申请的那块内存可能是被一处你未预料的事件更改过了.这种情况比较复杂,很难一下子猜到症结所在. 鉴于你在32位色彩和16位色彩下的情况,建议你查一下bitmap等GDI对象是不是把你这块内存给冲了.如果可能,帖代码看.