使用%d格式说明符执行CString :: Format操作时,VC ++ 6.0应用程序崩溃。这不会始终发生,但会在应用程序内存增长到100MB或更多时发生。 在CString副本完成时,有时也会发现相同的崩溃。 调用堆栈看起来像这样
mfc42u!CFixedAlloc ::的Alloc + 82
mfc42u!CString的:: AllocBuffer就会+ 3F 00000038 00000038 005b5b64
mfc42u!CString的:: AllocBeforeWrite + 31 00000038 0a5bfdbc 005b5b64
mfc42u!CString的:: AssignCopy + 13 00000038 057cb83f 0a5bfe90
mfc42u!CString的::运算= + 4B
这会引发访问冲突异常。
答案 0 :(得分:0)
如果在分配内存时崩溃,则可能是由于堆损坏。在启用堆测试的AppVerifier下运行您的应用程序。这使您可以在代码中看到各种问题,如双重释放,堆ovveruns / underruns等。
答案 1 :(得分:0)
这可能不是它,但我最近遇到a known issue realloc破坏了VS6下的小块堆。如果你在代码的其他地方有一个realloc(或使用像vector一样的东西),它可能会导致你所看到的。
问题的解决方法是破解realloc.c,编写自己的realloc函数,或者在代码中执行“_set_sbh_threshold(0)”以禁用过时的小块堆。