我正在编写TCP连接的客户端,并且从IP到socket_addr的转换会导致内存泄漏。Unix套接字:hostent使内存泄漏
还有就是以下过程:
#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 */
此代码工作正常,但是当我使用跟踪内存我花了5个内存泄漏。他们是由该行创建:
hostent * host = gethostbyaddr(ip, 4, AF_INET); // ip is char[4], I use IPv4
我试图删除它delete host;
但这会导致分段错误。
你有什么想法我可以如何清理内存吗?这是我的学校项目,我们必须正确处理记忆。
编辑: 我使用Linux操作系统Ubuntu 9.04,G ++ 4.3.3和存储器测试挡泥板库
我使用Linux Ubuntu 9.04与g ++编译器4.3.3。我用mudflap测试内存,它工作的很好,所以我不认为这是误报 – Gaim 2009-12-30 18:52:57
我曾经使用的所有内存分配跟踪器都会给出误报。无论如何,如果您希望您的应用程序完全可以随身携带,则无法释放内存。 – 2009-12-30 18:55:58
感谢您的解决方案,虽然它并不令我高兴。 – Gaim 2009-12-30 19:06:30