Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Problem mit einem Zeiger...

  Alt 26. Jan 2007, 11:20
Hi Unwissende, marabu und Muehle..
Ich denke das sollte sich auf alle beziehen:

Zitat von Der_Unwissende:
Zitat von xZise:
Wenn es nicht am Code liegt, werde ich mich wohl an den Programmierer des Parsers wenden müssen
HI,
von welchem Typ ist denn dieser Parser. Schon klar, dass es sich um TExCqParser handelt, aber ist das eine Klasse oder ein Record? (gehe mal stark von ersterem aus). Wenn es eine Klasse ist, so wirst Du schon mal keinen Zeiger brauchen, da in der Variable Parser eh nur eine Referenz (ein impliziter Zeiger) übergeben wird.
Ich war mir nicht sicher Und ein Zeiger auf einen Zeiger sollte doch funzen ^^ (und in setVars funzt es ja auch) Ich werds ändern

Zitat von Der_Unwissende:
Dein Fehler kann gleich durch verschiedene Dinge entstehen, aber am wahrscheinlichsten liegt es am falschen Index. Du greifst auf die Eigenschaft parser.Variables.Items zu, die dürften sich zwischen 0 und parser.Variables.Length - 1 liegen. Das prüfst Du aber nie. Für den Fall, dass noch kein Eintrag ausgewählt ist, dürfte der Index hier -1 sein und es könnte zu dem Fehler kommen. Dann prüfst Du auch nicht, ob ein Parser zugewiesen wurde (assigned(parser^)).
1. Der Typ der Liste ist, dass man dort nichts eintippen kann... d.h. es sind nur die Einträge möglich die in "setVars" gesetzt wurden. Und dazwischen habe ich eigentlich keine Funktion aufgerufen.
2. Ich werde mir dass absichern (<length> etc.)

Zitat von Der_Unwissende:
Ich gehe einfach mal davon aus, dass es sich bei dieser Prozedur um die Ereignisbehandlung eine Komponente handelt? Und genau hier dürfte eben dieses Ereignis schon beim Anzeigen aufgerufen werden (und der ItemIndex muss zu dem Zeitpunkt nicht gültig, der Parser nicht gesetzt sein). Also einfach vorher prüfen und nur wenn Du hier die Korrektheit sicherstellst den Inhalt ausführen.
Also es ist der Code der Listbox (cbList), aber ich habe oben ja geschrieben, dass ich es absichern werde ^^

PS: Kanns ggf. daran liegen, dass diese Form, nicht die aufrufende Form kennt?

MfG
xZise

[edit]sry Hawkeye ^^ Ganz übersehen
Zitat von Hawkeye219:
Hallo Fabian,

der Fehler scheint ja heute sehr beliebt zu sein: klick
Bei dir steckt er in der Methode setVariables.

Gruß Hawkeye
Also wie löst man das, dann?
Zitat von Hawkeye219:
Hallo,

der Fehler dürfte hier stecken:

Delphi-Quellcode:
procedure TObjList.Add(AItem: TObject);
begin
  if FLength = FCapacity then
    Grow;
  FItems^[FLength] := PObject(@AItem);
  Inc(FLength);
end;
Du speicherst die Adresse einer lokalen Variablen (nämlich des Parameters) in der Liste. Diese Adresse ist nach dem Verlassen der Routine ungültig.

Gruß Hawkeye
[/edit]

[edit]Boar bin ich doof ^^ Ich muss doch nur die Instanzvariable speichern [/edit]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat