Сбой в CString - PullRequest
       28

Сбой в CString

2 голосов
/ 16 ноября 2009

Я наблюдаю сбой в моем приложении, и стек вызовов показывает ниже

mfc42u!CString::AllocBeforeWrite+5    
mfc42u!CString::operator=+22 

Понятия не имею, почему это происходит. Это не часто происходит также. Любые предложения помогут. У меня есть аварийный дамп, но я не могу двигаться дальше.

Операция, которую я выполняю, выглядит примерно так

iParseErr += m_RawMessage[wMsgLen-32] != NC_SP;

где m_RawMessage - массив символов длиной 512. wMsgLen является неподписанным коротким и NC_SP определяется как

#define NC_SP   0x20     // Space

EDIT:

стек вызовов:

042afe3c 5f8090dd mfc42u!CString::AllocBeforeWrite+0x5 * WARNING: Unable to verify checksum for WP Communications Server.exe 
042afe50 0045f0c0 mfc42u!CString::operator=+0x22 
042aff10 5f814d6b WP_Communications_Server!CParserN1000::iCheckMessage(void)+0x665 [V:\CSAC\SourceCode\WP Communications Server\HW Parser N1000.cpp @ 1279] 
042aff80 77c3a3b0 mfc42u!_AfxThreadEntry+0xe6 
042affb4 7c80b729 msvcrt!_endthreadex+0xa9
042affec 00000000 kernel32!BaseThreadStart+0x37 

Ну, это полный стек вызовов, и я разместил фрагмент кода, как в моем исходном сообщении

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 ноября 2009

У меня есть предложение, которое может вас немного расстроить:

CString :: AllocBeforeWrite подразумевает, что система пытается выделить немного памяти.

Может ли быть так, что какая-то другая операция с памятью (особенно освобождение или изменение размера памяти) была ранее повреждена?

Типичная проблема с управлением памятью в C / C ++ состоит в том, что ошибка при освобождении (или изменении размера) памяти (например, два раза при освобождении одного и того же мусора памяти) не приведет к немедленному отказу системы, но может вызвать дамп намного позже особенно когда должна быть выделена новая память.

Ваша ситуация выглядит так.

Плохая вещь:

Может быть очень трудно найти место, где происходит настоящая ошибка - где в первую очередь повреждена куча.

Это также может быть причиной того, что ваша проблема возникает только время от времени. Это может зависеть от сложной ситуации заранее.

1 голос
/ 16 ноября 2009

Я уверен, что вы проверили очевидное: wMsgLen> = 32

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...