2010-01-11 6 views
-2

함수에서 메모리가 할당되면 해당 메모리를 주소를 반환하여 함수 외부에서 사용할 수 있습니까?함수에서 할당 된 메모리의 주소 반환

예외가 있습니까? 다음은 그러한 "예"입니다 :

const char * f() { 
    return "HELLO"; 
} 

설명하는 방법?

감사합니다.

답변

3

왜 이것이 불가능하다고 생각하십니까? 호출 함수에 대한 주소를 변수로 반환하지 않는다는 규칙과 혼동하는 것 같습니다. 함수의 지역 변수는 해당 함수 호출이 지속되는 동안 만 유효하기 때문에 그렇게 할 수 없습니다. 일단 함수가 돌아 오면, 그 변수들은 쓰레기가됩니다.

수명이 함수 호출의 수명을 초과하는 경우가 있습니다. 주소를 반환하는 것이 좋습니다. 이러한 것들의 예로는 힙에 할당 된 메모리 블록 (예 : malloc) 또는 정적 저장 기간 (예 : 전역 변수 및 문자열 리터럴)이 있습니다.

2

"Hello"는 상수입니다. 그것은 사라지지 않으므로 포인터를 사용하는 것이 좋습니다. 지역 변수는 또 다른 이야기입니다 ...

3

문자열 리터럴은 정적으로 할당되므로 "HELLO"와 같은 문자열 리터럴의 주소를 반환하는 것이 안전하며 아무 문제없이 함수 외부에서 사용할 수 있습니다.

관련 문제