tôi có mã này ngay tại đây để truy xuất các địa chỉ IP từ một hostname:Memory Leak GETIPFROMHOST
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
winsock;
function GetIPFromHost(const HostName: string): string;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
i: Integer;
begin
Result := '';
phe := GetHostByName(PChar(HostName));
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
i := 0;
while pPtr^[i] <> nil do
begin
Result := inet_ntoa(pptr^[i]^);
Inc(i);
end;
end;
var
wsaData: TWSAData;
begin
if (WSAStartup($0202, wsaData) <> 0) then begin
Exit;
end;
while true do begin
sleep (1000);
GetIPFromHost ('localhost');
end;
nó hoạt động tốt và mang lại cho tôi địa chỉ IP. Thật không may, tôi cần chức năng này một vài lần để so sánh DNS với địa chỉ IP.
Vì lý do nào đó, tôi nhận được Rò rỉ bộ nhớ lớn và bộ nhớ của chương trình của tôi tăng rất nhanh. Tại sao điều đó và làm thế nào tôi có thể giải phóng bộ nhớ?
Xin cảm ơn trước.
Có thực sự là một rò rỉ bộ nhớ, hoặc là quá trình tải của bạn trong một số thư viện? –
nó là một rò rỉ bộ nhớ. Tôi đang sử dụng Delphi7. vòng lặp chỉ biểu thị rằng mỗi khi hàm được gọi là bộ nhớ tăng lên. –
Tôi không biết delphi nhưng bạn không cần phải giải phóng bộ nhớ được chỉ bởi phe ở cuối GetIPFromHost? – clime