Rit*_*ose 5 c stack heap-memory
我的功能:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在主要:
struct hostent * host = gethost(argv[2]);
Run Code Online (Sandbox Code Playgroud)
(忽略代码中的任何小错误,我从内存中喷出)
这很好用.尽管事实上我没有自由,但Valgrind并没有告诉我,我正在失去记忆.
为什么?我认为在堆栈上分配的东西会随着函数调用返回而消失?或者是因为我返回指针?这有什么危险吗?
Gab*_*abe 10
host没有在堆栈上分配,只有指向它的指针在堆栈上.函数返回时会复制指针,因此代码没有任何问题.
请注意,gethostbyname实际上并不动态分配内存.它总是返回一个指向同一个静态分配的内存块的指针,这就是valgrind不报告泄漏的原因.但要小心,因为这意味着hostent如果要稍后保存该值,则必须复制函数返回的值,因为进一步调用gethost将覆盖它.
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |