Moin Stefan,
was mir gerade erst auffällt:
name[c] := new(pChar);
funktioniert sowieso nicht. Es muss heissen:
new(name[c]);
Ich möchte lieber nicht wissen, was das Programm da beim Ablauf macht
Schau Dir noch mal genau die Doku zu New an.
Ausserdem scheint die Struktur noch einmal überarbeitungswürdig
Der Code dürfte Speicherlücken ohne Ende produzieren, selbst wenn Du das Erzeugen der Variablen umkehrst, um sie freizugeben.
Name,
ip usw. sind ja nur eindimensionale Arrays (abgesehen davon, dass der Bezeichner Name unglücklich gewählt ist, da das Formular auch eine Eigenschaft dieses Namens hat), du belegst dieses aber für jeden Durchlauf von lLoop mit neuen Werten.
Am Ende kommst Du also nur noch an die Daten von [NumDevices-1] sowie alle [0] heran.
Was dazwischenliegt, kann nicht mehr freigegeben werden, da Du keinen Zugriff mehr darauf hast.
Durch die Struktur steige ich auch nicht ganz durch.
Wozu diese Schleifen:
for c:= 0 to MAX_TCP_NM_LENGTH do name[c] := new(pChar);
Du verwendest hinterher ja eh' nur das Element[0].
Dann könntest Du ja auf das Ganze verzichten, und gleich
New(nBuff[lLoop]);
schreiben.
Jetzt, wo ich noch einmal einen Blick da reinwerfe:
Die Schleife könnte auch so aussehen:
Delphi-Quellcode:
for lLoop := 0 to NumDevices-1 do begin
nBuff[lLoop] := AllocMem(MAX_TCP_NM_LENGTH+1);
// usw.
end;
Danach ein try und im finally dann die Schleife erneut, allerdings mit FreeMem.