void* myfunction() {
char *p;
*p = 0;
return (void*) &p;
}
나는 return 문에 문제가 있다는 것을 알고 있지만 혼란 스럽다. 어떤 힌트?코드에 어떤 문제가 있습니까?
감사합니다.
void* myfunction() {
char *p;
*p = 0;
return (void*) &p;
}
나는 return 문에 문제가 있다는 것을 알고 있지만 혼란 스럽다. 어떤 힌트?코드에 어떤 문제가 있습니까?
감사합니다.
*p = 0;
에있는 return 문 앞에 문제가 있습니다. p
을 초기화하지 않았으므로 단위 화 된 포인터가 유지하는 임의의 위치에 씁니다. 그렇게하면 정의되지 않은 동작이 발생하므로 이후에 의미있는 해석이 전혀 없습니다.
당신이 고쳤다 고 가정하면 return 문도 문제가 될 것입니다. 반환 된 포인터가 사용되기 전에 반환 된 포인터로 포인터를 반환하면 포인터가 반환됩니다. 정의되지 않은 동작.
아마도 p 님이 아직 메모리를 할당하지 않았습니다. 그리고 * p는 메모리 위반 일 수 있습니다. –
로컬 변수가 반환됩니다.이 변수는 좋지 않습니다. – Peter
@Peter : 지역 변수의 값을 반환하는 것은 문제가되지 않습니다. 지역 변수의 * 주소 * 반환 (여기) - 귀하의 결론은 정확하지만 문제의 설명은 아닙니다. –