当给出%d时,VC ++ 6.0应用程序在CString :: Format中崩溃

时间:2009-07-09 17:22:09

标签: crash format vc6 cstring

使用%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

这会引发访问冲突异常。

2 个答案:

答案 0 :(得分:0)

如果在分配内存时崩溃,则可能是由于堆损坏。在启用堆测试的AppVerifier下运行您的应用程序。这使您可以在代码中看到各种问题,如双重释放,堆ovveruns / underruns等。

答案 1 :(得分:0)

这可能不是它,但我最近遇到a known issue realloc破坏了VS6下的小块堆。如果你在代码的其他地方有一个realloc(或使用像vector一样的东西),它可能会导致你所看到的。

问题的解决方法是破解realloc.c,编写自己的realloc函数,或者在代码中执行“_set_sbh_threshold(0)”以禁用过时的小块堆。