通常,在低版本的Visual Studio(低于VS2010)中创建的MFC工程,使用高版本的VC编译器转换后的工程,很多MFC开头控件不能正常使用,标准控件不受影响。
典型的情况就是MFC VSListBox控件的Heap corruption detected错误。
原因分析:是对象存储的大小超过对应的堆栈内存上限,超出的部分需要被存储在后面的内存地址中。然而在连续分配的堆栈中,这会引起冲突而导致堆栈损坏。VS默认设置该控件的标题为""。而标题字符串有"\0",在内存释放时造成内存堆栈损坏。
解决方法:知道了原因出在标题的字符串上,就可以在OnInitDialog中使用SetWindowText重新设置VSlistbox控件的标题就可以了。
备注:这个问题在VS2010及以上的版本不存在,这些版本默认设置该控件的标题为MfcListBox1。另外,MFC button控件完全不能用,编译时会触发一个断点,再继续会Debug Assertion Failed. (网上似乎也没有相应的解决方法)