2016-08-16 2 views
1

소켓으로 작업 중이므로 TCP 라이브러리에 액세스 할 수 없습니다. 클라이언트의 연결이 끊어지면 개체의 메모리가 삭제되지만이를 수행하지는 않는 것 같습니다. NULL 어떻게 확인할 수 있습니까?C++ 삭제 된 포인터 확인

코멘트가 올바르게 표시로

Client is 0xddddddddddddddd

+5

'0xddd ... dd'는 (디버그 모드에서) 메모리가 초기화되지 않았 음을 나타냅니다. 당신이 'NULL'로 설정하는 것을 잊어 버린 것처럼 보입니다. – CompuChip

+0

@CompuChip 동의 함, 디버그 버전. 릴리즈가 단위로 연결된 데이터를 채우지 않습니다. –

+2

코드/출력을 게시하십시오. – slawekwin

답변

0

, 삭제 된 포인터에 대해 확인할 수없는 경우

Client != NULL => true 

현재 나는 충돌 다음을 보유하고 있습니다. 이런 이유로, 포인터를 삭제할 때 반쯤 괜찮은 C++ 프레임 워크가 알려줄 것입니다. 알맞은 프레임 워크는이를 위해 스마트 포인터를 사용합니다.

임의로 오브젝트를 삭제하는 코드를 발견 한 경우, 대안을 찾으려는 대신 교체하십시오. 이러한 코드로 인해 발생하는 유일한 문제는 아닙니다.

0

이것은 네트워크 프로그래밍에서 다루어야하는 전형적인 경우입니다. 다른 의견에 따르면 포인터가 삭제되었는지 여부는 감지 할 수 없습니다.

제가 개인적으로 사용하는 솔루션은 shared_ptr입니다. 연결이 닫히면 refcount가 감소하고 연결 상태가 closed로 설정됩니다.