0

使用 %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::operator=+4b

这会引发访问冲突异常。

4

2 回答 2

0

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

于 2009-07-09T17:24:17.277 回答
0

这可能不是,但我最近遇到了一个已知问题,即 realloc 会破坏 VS6 下的小块堆。如果您在代码的其他地方有一个 realloc(或使用类似使用 realloc 的向量),它可能会导致您所看到的。

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

于 2009-07-09T17:47:49.663 回答