2013-10-05 2 views
0

이러한 함수는 매달린 포인터를 생성합니까?이것이 매달린 포인터를 생성합니까?

int *foo() { 
    int a[2] = {2, 3}; 
    int *p = NULL; 
    p = a; 
    return p; 
} 
+0

그렇습니다. 왜냐하면'foo'가 종료 될 때'a'를 (스택 상에) 보유한 메모리는 C 호출 시퀀스의 스택 관리 덕분에 할당이 해제되기 때문입니다. – lurker

답변

6

예. 자동 저장 기간이있는 배열에 대한 포인터를 반환하고 있습니다. 함수가 리턴 할 때 포인터는 유효하지 않습니다.

2

로컬 변수에 대한 포인터를 반환하지 마십시오.
변수 a이없는 경우 foo이 반환되므로 포인터가 유효하지 않으므로 (정의되지 않은 동작이 호출됩니다).

+1

기술적으로 반환 된 포인터 (p)는 아마도 스택으로 사용중인 메모리 위치를 가리킬 것입니다. 그러나 반환 된 포인터를 보게 될 때까지는 다른 메모리가 해당 메모리 위치를 덮어 쓰지 않았다는 보장은 없습니다. segfault 또는 다른 잘못된 포인터 오류가 발생하지 않더라도 아무 것도 유용하지 않음을 나타낼 수는 없습니다. –

관련 문제