Сбой приложения VC ++ 6.0 внутри CString :: Format при задании% d - PullRequest
0 голосов
/ 09 июля 2009

Приложение VC ++ 6.0 аварийно завершает работу при выполнении операции CString :: Format со спецификатором формата% d. Это происходит не всегда, но происходит, когда объем памяти приложения увеличивается до 100 МБ или более. ТАКЖЕ иногда такое же падение наблюдается, когда делается копия 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 :: оператор = + 4б

и это вызывает исключение нарушения доступа.

Ответы [ 2 ]

0 голосов
/ 09 июля 2009

Вероятно, это не так, но недавно я столкнулся с известной проблемой , когда realloc повредил кучу небольших блоков под VS6. Если у вас есть realloc (или вы используете что-то вроде vector, которое использует realloc) в другом месте вашего кода, это может вызвать то, что вы видите.

Исправлена ​​проблема: взломать realloc.c, написать собственную функцию realloc или выполнить «_set_sbh_threshold (0)» в своем коде, чтобы отключить эту устаревшую кучу небольших блоков.

0 голосов
/ 09 июля 2009

Если при сбое памяти происходит сбой, это может быть связано с повреждением кучи. Запустите приложение под AppVerifier с включенным тестом Кучи. Это позволяет вам видеть различные проблемы в вашем коде, такие как двойное освобождение, куча ovveruns / underruns и т.д.

...