2010-04-26 2 views
2

아래의 코드로 인해 어떻게 매달린 포인터가 생길 수 있습니까? 제 "일부 코드가 「복사 다른 포인터 변수 cPointer의 포인터 값 및 두 번째"일부 코드가 "다른 포인터 변수를 사용하는 경우free()를 사용하면 NULL이 배정 된 포인터에 즉시 이어지는가?

{ 
    char *cPointer = malloc (some constant number); 
    /* some code */ 
    free (cPointer);  
    cPointer = NULL;   
    /* some code */ 
} 

답변

14

수 없습니다.

이 것 : 그것이 가리키는 객체가 사라 졌어요하지만 b 여전히 저장 개체가 당신이하려고 할 때, 당신은 재미있는 결과를 얻을 수 사용되는 메모리에 주소 때문에

char * a = malloc(556); 
char * b = a; 
free(a); 
a = NULL; 

b는 지금, 포인터를달라고한다 메모리에 다시 액세스했는지 또는 변경되지 않았습니까?

3

, 이것은 문제가 될 것이다.

첫 번째 "일부 코드"가 예외를 생성하여 사용 가능한 공간에 도달하지 못하면 메모리가 누수됩니다.

+0

일부 코드는 포인터와 관련이 없다고 가정합니다. cPointer = NULL을 지정하지 않으면; 성명서는 내가 cPOinter에 매달려있는 포인터를 가지고 있다는 것을 의미합니까? – ckv

+1

@viswanathan, 아마도 질문을 편집하고 틀린 것으로 판단하는 문구를 허용하고 싶을 것입니다. –

+1

cPointer = NULL을 제거하면; 문을 사용하면 cPointer는 매달려있는 포인터가되지만 사용하면 문제가 발생합니다. 프로그래머가 NULL을 할당하는 목적은 의도하지 않은 사용, 즉 버그를 찾고 디버깅하는 데 도움이되는 것입니다. –

관련 문제