2012-05-11 6 views
2
void* myfunction() { 
char *p; 
    *p = 0; 
    return (void*) &p; 
} 

나는 return 문에 문제가 있다는 것을 알고 있지만 혼란 스럽다. 어떤 힌트?코드에 어떤 문제가 있습니까?

감사합니다.

+0

아마도 p 님이 아직 메모리를 할당하지 않았습니다. 그리고 * p는 메모리 위반 일 수 있습니다. –

+0

로컬 변수가 반환됩니다.이 변수는 좋지 않습니다. – Peter

+2

@Peter : 지역 변수의 값을 반환하는 것은 문제가되지 않습니다. 지역 변수의 * 주소 * 반환 (여기) - 귀하의 결론은 정확하지만 문제의 설명은 아닙니다. –

답변

8

*p = 0;에있는 return 문 앞에 문제가 있습니다. p을 초기화하지 않았으므로 단위 화 된 포인터가 유지하는 임의의 위치에 씁니다. 그렇게하면 정의되지 않은 동작이 발생하므로 이후에 의미있는 해석이 전혀 없습니다.

당신이 고쳤다 고 가정하면 return 문도 문제가 될 것입니다. 반환 된 포인터가 사용되기 전에 반환 된 포인터로 포인터를 반환하면 포인터가 반환됩니다. 정의되지 않은 동작.

+0

바로 고마워요! – Rafal

+0

@ BloodyHell666,이 대답을 통해 문제를 해결할 수 있다면 동의 버튼을 클릭하여 대답을 수락해야합니다. – Jay

+0

죄송합니다, 새로운 여기 있어요. – Rafal

관련 문제