我的功能:
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/