문제

응용 프로그램 내에서 충돌을 관찰하고 있으며 아래의 통화 스택 쇼가 아래에 표시됩니다.

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

이것이 왜 발생하는지 모르겠습니다. 이것은 자주 발생하지 않습니다. 모든 제안이 도움이 될 것입니다. 나는 나와 함께 충돌 덤프가 있지만 더 이상 진행할 수는 없습니다.

내가 수행하는 작업은 이와 같은 것입니다

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

여기서 M_RAWMESSAGE는 512 길이 Char 어레이입니다. WMSGLEN은 서명되지 않았으며 NC_SP는 다음과 같이 정의됩니다

#define NC_SP   0x20     // Space

편집하다:

콜 스택 :

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 

글쎄 이것은 완전한 통화 스택이며 원래 메시지에서 코드 스 니펫을 게시했습니다.

감사

도움이 되었습니까?

해결책

나는 당신에게 약간 실망 스러울 수있는 제안이 있습니다.

cstring :: allocbeforewrite는 나에게 연루되어 시스템이 메모리를 할당하려고합니다.

다른 메모리 작동 (특히 메모리의 자유 또는 크기 조정)이 이전에 손상되었을 수 있습니까?

C/C ++ 메모리 관리의 일반적인 문제는 메모리를 자유롭게 (또는 크기 조정하는) 오류 (예 : 동일한 메모리 정크를 두 번 자유롭게하는 것)에 대한 오류가 시스템에 즉시 충돌하지 않지만 특히 새로운 경우 덤프를 일으킬 수 있다는 것입니다. 메모리는 할당됩니다.

당신의 상황은 저에게 아주 좋아 보입니다.

나쁜 점은 다음과 같습니다.

실제 오류가 발생하는 장소를 찾기가 매우 어려울 수 있습니다. 힙이 처음에 손상된 곳.

이것은 또한 당신의 문제가 가끔만 발생하는 이유 일 수 있습니다. 사전에 복잡한 상황에 의존 할 수 있습니다.

다른 팁

나는 당신이 명백한 것을 확인했을 것이라고 확신합니다 : wmsglen> = 32

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top