디버깅 시에 free 함수를 만나면 조사식창에서 값이 어떻게 바뀌나요??

  • hiwaryi
    hiwaryi

    포인터 사용후에 free 로 메모리 해제시에 디버그 창에선 값이 어떻게 되어 정상인가요?
    NULL 값으로 바뀌는건가요?


    10년 전
5개의 댓글이 있습니다.
  • Being
    Being

    바뀌지 않아도 상관없습니다. 해당 영역의 값을 덮어씌울 이유는 특별히 없기 때문이지요. 실제로는 바뀔 수도 있고 바뀌지 않을 수도 있는데, 디버깅의 편의를 위해 일부 컴파일러/라이브러리의 경우 최적화 옵션을 켜지 않는 경우 free()에서 메모리를 특정한 값으로 덮어씌우기도 합니다. 이 부분이 해제된 메모리라는 것을 좀 더 명시적으로 표현하기 위한 것이지요.


    10년 전 link
  • hiwaryi
    hiwaryi

    그럼 어떻게 하면 정상적으로 메모리가 해제 되었는지 확인 가능할까요?
    Free() 뒷부분에서 해당 포인터에 접근을 해보는 방법밖에 없나요?


    10년 전 link
  • Being
    Being

    별도의 분석 도구 없이 해제되었는지 확인할 방법은 없습니다.


    10년 전 link
  • Being
    Being

    음.. 그러나 앞에서 말씀드렸다시피 일부 컴파일러/라이브러리에서는 디버그 모드에서 메모리를 특정 값으로 덮어씌우기 때문에 IDE에서 watch하고 계신 상황이라면 확인 가능할 것 같습니다.


    10년 전 link
  • hiwaryi
    hiwaryi

    넵 매번 감사합니다 :)


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.