내 기능 : 메인에서in C : 스택 할당 구조가 함수 외부에 존재하는 이유는 무엇입니까?
struct hostent * gethost(char * hostname){
if(/*some condition under which I want
to change the mode of my program to not take a host*/){
return null
}
else{
struct hostent * host = gethostbyname(hostname);
return host;
}
}
는 :
struct hostent * host = gethost(argv[2]);
이 잘 작동 (I 메모리에서 분출하고있어 코드의 모든 사소한 오류를 무시). Valgrind는 내가 풀어주지 않은 사실에도 불구하고 기억을 잃어 가고 있다고 말하지 않습니다.
왜? 스택에 할당 된 항목이 함수 호출이 반환되면 사라지는 줄 알았지? 포인터를 반환했기 때문입니까? 이게 어떤면에서 위험한거야?
아 감사합니다. 그래서 그것은'gethostbyname'에게 독특한 것입니까? 예를 들어'char *'에 대해 이렇게했다면, 그 배열의 값은 나중에 덮어 쓸 수 있습니까? 내 프로그램은 실행 당 하나의 호스트 만 처리해야하므로 잘되어야합니다. –
나중에 호출 할 때 포인터가 가리키는 값이 덮어 쓰여 지는지 여부는 호출하는 함수에 따라 다릅니다. 전달하지 않는 포인터를 반환하는 C 표준 라이브러리 함수의 경우 정적 메모리에 대한 포인터를 반환하고 덮어 쓸 수 있다고 가정 할 수 있습니다. – Gabe