Gai*_*aim 1 c++ sockets memory-leaks
我正在为TCP连接编写客户端,从IP到socket_addr的转换会导致内存泄漏.
有以下过程:
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
/** there is some code like method header etc. */
hostent * host = gethostbyaddr( ip, 4, AF_INET ); // ip is char[4], I use IPv4
if ( !host ) return -2; // bad IP
netSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if ( netSocket == -1 ) return -3; // error during socket opening
sockaddr_in serverSock;
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons( port );
memcpy( &( serverSock.sin_addr ), host->h_addr, host->h_length );
// and now there is function connect(...);
/** end of method */
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常但是当我使用跟踪内存时我占用了5个内存泄漏.它们由以下行创建:
hostent * host = gethostbyaddr( ip, 4, AF_INET ); // ip is char[4], I use IPv4
Run Code Online (Sandbox Code Playgroud)
我试过删除它delete host;但这会导致分段错误.
你有什么想法我可以清理记忆吗?这是我的学校项目,我们必须正确处理内存.
编辑:我使用Linux Ubuntu 9.04,g ++ 4.3.3和内存测试mudflap库
小智 7
您没有说明您所使用的平台,但通常gethostbyaddr返回的内存将由您正在使用的套接字库分配和管理 - 您不必自行释放它.无论您使用什么来诊断泄漏,都可能会产生误报.
例如,此手册页http://www.opengroup.org/onlinepubs/009695399/functions/gethostbyaddr.html表示返回的指针可能是静态数据,而MS使用线程本地存储.在任何情况下都不能或不应该释放数据,并且在任何情况下都不存在泄漏.
| 归档时间: |
|
| 查看次数: |
2681 次 |
| 最近记录: |