我的功能:

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]);

(忽略代码中的任何小错误,我从内存中喷涌而出)

这很好。尽管我没有释放,但Valgrind并没有告诉我我正在失去内存。

为什么?我以为分配在堆栈上的东西随着函数调用的返回而消失了?还是因为我返回了指针?这有什么危险吗?

最佳答案

host没有分配在堆栈上,只有一个指向它的指针在堆栈上。函数返回时,指针将被复制,因此代码没有错。

请注意,gethostbyname实际上并不动态分配内存。它总是返回一个指向同一静态分配的内存块的指针,这就是为什么valgrind不报告泄漏的原因。但是要小心,因为这意味着如果要保存该值以供以后使用,则必须复制函数返回的hostent,因为进一步调用gethost会覆盖它。

关于c - 在C : Why does a stack allocated structure exist outside of the function?中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2352260/

10-11 16:41