2011-03-29 3 views
0

QueueUserWorkItem을 사용하여 winsock accept를 호출하는 래퍼 클래스에서 함수를 호출하는 C++ 코드가 있습니다. 이것은 디버그에서 잘 작동하며 Dependency Walker의 프로필 시작 옵션을 사용하여 릴리스 실행 파일을 실행하는 경우에도 작동합니다. 그러나 릴리스 실행 파일을 정상적으로 실행하면 QueueUserWorkItem 호출시 충돌이 발생합니다. 해당 함수를 호출하자마자 응용 프로그램이 종료됩니다. 실행은 QueueUserWorkItem에 전달하는 함수에 결코 도달하지 않지만 함수 포인터는 유효합니다.Windows QueueUserWorkItem C++ 릴리스 모드 문제

QueueUserWorkItem이 릴리스 모드에서 충돌하지만 디버그되지 못하게하는 원인을 알고있는 사람이 있습니까?

+0

QUWI가 발생하고 금형 제작의 영향을받는 크래시는 일반적으로 스레딩 경주로 인해 발생합니다. 변경된 타이밍으로 트리거 될 수 있습니다. –

답변

1

누구나 <random function>이 (가) 릴리스 모드에서 충돌하지만 디버그되지 않게하는 원인을 알고 있습니까?

예, 버퍼 오버플로입니다. 디버그 빌드에는 덮어 쓰기 할 수있는 가드가 있지만 릴리스 모드에서는 중요한 메모리를 덮어 쓰는 것입니다.

+1

예, 다른 것들 중에서 ... "릴리스 버전에서 생존"은 일반적인 참조입니다 : http://www.codeproject.com/KB/debug/survivereleasever.aspx – ildjarn

관련 문제