Entwickler-Ecke
Internet / Netzwerk - Speicher, und was auch immer >>FEHLER<< (EAcce
ebi - Di 12.11.02 21:33
Titel: Speicher, und was auch immer >>FEHLER<< (EAcce
Ich habe folgende Procedure geschreiben:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.ClientsErstellen(); var i: integer; begin
for i := 1 to maxBenutzer do begin Client [i].Free; end;
for i := 1 to ClientAnzahl do begin Client [i] := TClientSocket.Create(Form1); Client [i].Port := Port; Client [i].Address := Benutzer[i].IP;
Client [i].Name := 'Client' + IntToStr(i);
Client [i].OnError := ClientError ;
Client [i].Open;
end;
end; |
wenn ich einen Benutzer hinzufüge und wieder diese Prozedur aufrufe, ist das kein Problem.
ABER: wenn ich einen Benutzer weniger habe als vorher und dann wieder diese Prozedur aufrufe macht der mir einen Fehler (EAccessViolation).
Was muß ich anders machen, damit dieser Fehler nicht entsteht???
LCS - Mi 13.11.02 07:39
Hi
Aus'm Stehgreif heraus würde ich sagen, du solltest mal deine Variable maxBenutzer prüfen. Eventuell ist die immer noch im 1 zu hoch und wenn du dann versuchst das Client[i].Free auszuführen, kracht's.
Ausserdem siehts so aus, als würden maxBenutzer und ClientAnzahl jeweils die gleichen Werte darstellen. Warum zwei unterschiedliche Variablen.
Gruss Lothar
ebi - Mi 13.11.02 16:46
MaxBenutzer ist eine Konstante!!!
Wieso sagt mir keiner sofort, dass ich nicht Komponenten.free anwenden kann, wenn die Komponenten nicht vorhanden sind?
In der Hilfe stand Delphi würde prüfen ob die Komp. vorhanden sind und dann eventuell diese freigeben.
Die Procedur funzt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.ClientsErstellen(); var i: integer; begin
for i := 1 to {------}ClientAnzahlAlt {------} do begin Client [i].Free; end;
for i := 1 to ClientAnzahl do begin Client [i] := TClientSocket.Create(Form1); Client [i].Port := Port; Client [i].Address := Benutzer[i].IP;
Client [i].Name := 'Client' + IntToStr(i);
Client [i].OnError := ClientError ;
Client [i].Open;
end;
{------} ClientAnzahlAlt := ClientAnzahl; {-----}
end; |
Trotzdem an alle danke!
Udontknow - Mi 13.11.02 17:08
| Zitat: |
| wenn ich einen Benutzer hinzufüge und wieder diese Prozedur aufrufe, ist das kein Problem. |
:shock: :?: Wie soll man denn das verstehen? Rufst du so eine Prozedur auf, wenn ein Client dazukommt?
Ich würde dir erst einmal raten, in einer Prozedur ClientsErstellen keine Clients freizugeben. Das eine hat mit dem anderen nix zu tun.
Cu,
Udontknow
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!