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