我正在編寫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