AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi StringList - Listenindex überschreitet das Maximum
Thema durchsuchen
Ansicht
Themen-Optionen

StringList - Listenindex überschreitet das Maximum

Ein Thema von hirnstroem · begonnen am 17. Nov 2006 · letzter Beitrag vom 17. Nov 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

StringList - Listenindex überschreitet das Maximum

  Alt 17. Nov 2006, 15:50
'loha Folks,

Beiträge zu diesem Thema gibt es viele, weitergeholfen hat mir bisher aber leider keiner.

Das Problem ist, dass zur Laufzeit einer Applikation sporadisch Fehlermeldungen generiert werden und zwar meistens dann, wenn mehrere Benutzer gleichzeitig dieselbe Funktion auf verschiedenen Geräten anwenden.

Die Fehlermeldung teilt folgendes mit: Erste Gelegenheit für Exception bei $77E7E592. Exception-Klasse EStringListError mit Meldung 'Listenindex überschreitet das Maximum (0)'. Prozess FACTS.exe (1580)

In dieser Meldung variiert der Listenindex wiederum.

Viel mehr kann ich dazu nicht sagen...deshalb -> Code:

Delphi-Quellcode:
function TCANCommunication.TryToGetAnswer(Data: String): Boolean;
var
  Time: Cardinal;
begin
  Time := GetTickCount;
  while Time + WaitForAnswerInterval > GetTickCount do
  begin
    if CANCommunication.CheckIfAnswerAvailable(Data) = True then //<- hierhin schickt mit der Debugger im Fehlerfall
    begin
      Result := True;
      Exit;
    end
    else Result := False;
  end;
end;
Der Fehler muss also in folgender Funktion zu finden sein:

Delphi-Quellcode:
function TCANCommunication.CheckIfAnswerAvailable(CANMessage: string): Boolean;
var
  Request, RequestUserID: String;
  i: Integer;
begin
  Request := IntToStr(HexStrToInt(CANMessage) + 1);
  RequestUserID := Copy(CANMessage, 0, 0);
  i := InputBuffer.Data.IndexOf(Request);
  if (i > -1) and (i <= InputBuffer.Data.Count) then
  begin
    try
      InputBuffer.User.Delete(i);
      InputBuffer.Data.Delete(i);
      InputBuffer.Time.Delete(i);
      Result := True;
    except
      Result := False;
    end;
  end
  else Result := False; // no StringList entry (answer) did match with the request
end;
In dieser Funktion wird eine Stringliste nach einer Antwort auf eine Anfrage durchsucht, wird diese Antwort gefunden, wird sie gelöscht.

Der zu löschende Index wird durch die Funktion IndexOf() bestimmt.
Danach wird geprüft ob dieser Index grösser als -1 ist und ob er zudem nicht grösser ist, als die Anzahl aller Einträge.
Zusätzlich wird das löschen noch in einem try except Block verpackt.
[Edit]Ok, das try except verhindert das auftreten der Fehlermeldung, wenn die Ausführbare Datei direkt, also einfach ausserhalb der Entwicklungsumgebund...grml, einfach dann wenn sie nicht mit F9 gestartet wird. Unschön ist das ganze trozdem[/Edit]

Trotz alledem taucht diese Fehlermeldung auf.

Weiss jemand Rat?

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#2

Re: StringList - Listenindex überschreitet das Maximum

  Alt 17. Nov 2006, 15:57
Probier mal die zweite Funktion gegen Reintranz zu sichern.
Dies geht mit einer CriticalSection. Diese muss aber midestens 'Modulglobal' sein, also als Variable im implementation-Abschnitt definieren, im initialization Creieren und im finalization zerstören.
jetzt kannst Du als erste Anweisung MyCriticalSection.Enter machen und als letzte MyCriticalSection.leave.
Solche Fehler kommen vor, wenn während der Abarbeitung der Funktion die Funktion nochmals aufgerufen wird.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: StringList - Listenindex überschreitet das Maximum

  Alt 17. Nov 2006, 15:59
1. IndexOf() liefert entweder -1 oder einen gültigen Index. Daher wäre die Abfrage zum oberen Ende hinfällig.
2. Die Abfrage zum oberen Ende (die hinfällig ist), ist falsch definiert. Es darf nicht <= heissen, weil du dann Count selbst mit als gültig ansiehst, aber dies ist es nicht. Anzahl und höchster Index sind was anderes bei 0-basierender Indizierung.

/EDIT: CriticalSection sollte die reentranz sicherstellen.
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#4

Re: StringList - Listenindex überschreitet das Maximum

  Alt 17. Nov 2006, 16:00
Dankeschön, das werde ich versuchen...am Montag.
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz