Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 unerklärliche Fehlermeldungen (https://www.delphipraxis.net/84264-2-unerklaerliche-fehlermeldungen.html)

maximus Caesar 14. Jan 2007 11:32


2 unerklärliche Fehlermeldungen
 
Hallo!
Ich bekomme zwei Fehlermeldungen die ich mir nicht erklären kann. Die erste ist vom Typ "" ist kein Itegerwert, die zweite "ungültige Zeigeroperation", in dieser Reihenfolge.
In diesem Bereich des Programmtextes treten Sie auf:

Delphi-Quellcode:
procedure TKonsole.LadeGrundgebaeude;
var i,i2:Integer;
    a:String;
begin
 try
  GrundGebaeude:=TobjectList.Create;
  Aufteilen:=TAufteilen.Create;
  Form1.Memo1.Clear;
  Form1.Memo1.Lines.LoadFromFile('data/Gebäude.dat');
  for i:=0 to Form1.Memo1.Lines.Count-1 do
  begin
   a:=Form1.Memo1.Lines[i];
   delete(a,3,length(a));
   if a<>'//' then begin
     Aufteilen.Explode(Form1.Memo1.Lines[i],',');
     i2:=Grundgebaeude.Add(TGrundgeb.Create);
     (Grundgebaeude.Items[i2] as TGrundgeb).ID:=StrToInt(Aufteilen.Werte[0]); //Byte
     (Grundgebaeude.Items[i2] as TGrundgeb).Name:=Aufteilen.Werte[1];        //String
     (Grundgebaeude.Items[i2] as TGrundgeb).Name2:=Aufteilen.Werte[2];       //String
     (Grundgebaeude.Items[i2] as TGrundgeb).Index:=StrToInt(Aufteilen.Werte[3]);//Byte
   end;
  end;
 finally
  Aufteilen.Free;
 end;
end;
Aufteilen gibt als Werte ein Array[0..3]of String zurück

Die Prozedur wird über einen Timer Aufgerufen, ca. 250 Milisekunden nach Anwendungsstart:
Delphi-Quellcode:
procedure TForm1.TimerStartTimer(Sender: TObject);
begin
  Konsole.LadeGrundgebaeude;
  TimerStart.Enabled:=False;
end;
Hier wird die Konsole erstellt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Einstellungen:=TEinstellungen.Create;
  menueaktiv:=False;
  menueBtn.Enabled:=False;
  AnzahlStaedte:=0;
  Ansicht:=0;
  Index:=1;
  AktiveTown:=-1;
  Konsole:=TKonsole.Create;
  ID:=0;
  Laeden:=TObjectList.Create;
  Productions:= TObjectList.Create;
end;
Der Inhalt der Datei ist so aufgebaut:
Delphi-Quellcode:
//Hier kann ein Kommentar stehen
1,Spielwarenladen,Spielwarenfabrik,1
2,Sportgeschäft,Sportindustrie,1
Sieht jemand den Fehler?

3_of_8 14. Jan 2007 11:37

Re: 2 unerklärliche Fehlermeldungen
 
Überprüf doch mal per Debugger, in welcher Zeile das auftritt. Die ungültige Zeigeroperation könnte durch den Downcast auf TGrundgeb verursacht werden.

Zacherl 14. Jan 2007 12:04

Re: 2 unerklärliche Fehlermeldungen
 
Ich vermute den Fehler in TAufteilen.

Luckie 14. Jan 2007 12:07

Re: 2 unerklärliche Fehlermeldungen
 
Wo hast du den ungültigen Integer Wert? Enthaält Wert[0] auch einen gültigen Integer?

maximus Caesar 14. Jan 2007 12:16

Re: 2 unerklärliche Fehlermeldungen
 
Die Werte hab ich überprüft. Stimmen alle.
Hab jetzt haltepunkte gesetzt, der Fehler muss hier oder dannach auftreten:
Delphi-Quellcode:
(Grundgebaeude.Items[i2] as TGrundgeb).Index:=StrToInt(Aufteilen.Werte[3]);
Das Objekt sieht so aus:
Delphi-Quellcode:
type TGrundGeb = class
  ID: Byte;
  Name,Name2: String;
  Index:Byte;
end;
Edit: In der Oben genannten Zeile kann ich auch keinen normalen Integerwert wie z.B. 5 zuweisen. setzte ich den Haltepunkt in diese Zeile, so kommt keine Fehlermeldung, erst dannach.

3_of_8 14. Jan 2007 12:18

Re: 2 unerklärliche Fehlermeldungen
 
Geh mit dem Evaluator ran.

Ich vermute mal, dass Grundgebaeude.Items[i2] kein TGrundgeb ist und Aufteilen.Werte[3] keine String-Repräsentation eines Integers.

maximus Caesar 14. Jan 2007 12:25

Re: 2 unerklärliche Fehlermeldungen
 
WIe funktioniert des mit dem Evaluator? Habs noch nie gemacht....

3_of_8 14. Jan 2007 12:28

Re: 2 unerklärliche Fehlermeldungen
 
Haltepunkt setzen, wenn er anhält Strg+F7 setzen und die Variablennamen/Anweisungen eingeben, deren Wert/Ergebnis du wissen willst.

maximus Caesar 14. Jan 2007 12:37

Re: 2 unerklärliche Fehlermeldungen
 
OK, ich habs versucht mit Grundgebaeude.FindInstanceOf(TGrundGeb), bringt mir aber nur "Die aufzurufende Funktion TObjectList.FindInstanceOf wurde vom Linker entfernt"

Grundgebaeude.Items[i2] bringt nur ()

Für Aufteilen.Werte[3]: '1' also eine Stringreräsentation eines Integers
An Aufteilen kanns eigentlich nicht liegen, das verwende ich genau so schon längere Zeit in mehreren Verschiedenen Projekten, wo es auch immer gut funktioniert hat.

thkerkmann 14. Jan 2007 13:15

Re: 2 unerklärliche Fehlermeldungen
 
Hi,

dann schalt mal die Optimierung aus, dann klappts auch mit dem Evaluator.

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Seite 1 von 2  1 2      

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