Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   komische Fehlermeldung, was bedeutet das? (https://www.delphipraxis.net/119960-komische-fehlermeldung-bedeutet-das.html)

Sh4dd4r 3. Sep 2008 19:23


komische Fehlermeldung, was bedeutet das?
 
Kann mir vielleicht jemand weiterhelfen, was das hier bedeutet?


Zitat:

[Warning] Unit1.pas(132): FOR-Loop variable 'i' may be undefined after loop
Was muss ich ändern, damits funktioniert? gibt bei mir ne Access Violation.

DeddyH 3. Sep 2008 19:24

Re: komische Fehlermeldung, was bedeutet das?
 
Du hast eine Schleifenvariable i definiert und greifst nach Ablauf der Schleife darauf zu.

mkinzler 3. Sep 2008 19:26

Re: komische Fehlermeldung, was bedeutet das?
 
Du scheinst ausserhalb der Schleife die Laufvariable zu verwenden. Wie sieht der Code aus? Ist i innerhalb der Grenzen?

Sh4dd4r 3. Sep 2008 20:48

Re: komische Fehlermeldung, was bedeutet das?
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var i,h:integer;
begin

Zufalls_Zahlen(Anzahl_Zufallszahlen);
WortWandel;

For i:=1 to Anzahl_Zufallszahlen do begin
  memo1.Lines.Add(IntToStr(Zufallszahlen[i]));
end;

For h:=1 to Anzahl_Zufallszahlen do begin
  memo1.lines.add(WList1.word[h]);
end;

end;
das ist der source code...

Meflin 3. Sep 2008 20:58

Re: komische Fehlermeldung, was bedeutet das?
 
Also 1. traue ich mich fast wetten, dass es for i := 0 to xxx - 1 heißen müsste, zweitens: Ist das der komplette Code? Irgendwo musst du doch i außerhalb der Schleife verwenden :gruebel:

mkinzler 3. Sep 2008 21:00

Re: komische Fehlermeldung, was bedeutet das?
 
Ausserdem ist der Wertebereich des Arrays nicht ersichtlich

zahor 3. Sep 2008 21:05

Re: komische Fehlermeldung, was bedeutet das?
 
und könntest du diese seltsamen funktionen, die ja offensichtlich aus irgendeiner drittunit stammen, mal erklären? was macht denn dieses wortwandel? v.a. weil es keine parameter hat.
aber helfen kann man dir nur, wenn du den kompletten code postest, oder zumindest die teile wo die arrays definiert werden, und falls sie dynamisch sind auch den teil wo ihnen eine dimension gegeben wird (der setlength-teil).

grenzgaenger 3. Sep 2008 21:06

Re: komische Fehlermeldung, was bedeutet das?
 
hab einfach keine lust auf: :glaskugel:

Sh4dd4r 3. Sep 2008 21:38

Re: komische Fehlermeldung, was bedeutet das?
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Unit3;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Hauptmenue1: TMenuItem;
    Aufgaben1: TMenuItem;
    Highscores1: TMenuItem;
    Accountladen1: TMenuItem;
    N1: TMenuItem;
    Accountspeichern1: TMenuItem;
    N2: TMenuItem;
    ENDE1: TMenuItem;
    Wrterlisten1: TMenuItem;
    Zahllisten1: TMenuItem;
    sonstiges1: TMenuItem;
    N3: TMenuItem;
    sonstiges2: TMenuItem;
    Reihenfolge1: TMenuItem;
    Drucheinander1: TMenuItem;
    MarathonTest1: TMenuItem;
    Spielkarten1: TMenuItem;
    N4: TMenuItem;
    Einfhrung1: TMenuItem;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure ENDE1Click(Sender: TObject);
    procedure Reihenfolge1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Reihenfolge;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Zufalls_Zahlen(Anzahl:integer);
    procedure Button1Click(Sender: TObject);
    procedure WortWandel;
  private
    wordlist1: TextFile;
    Anzahl_Zufallszahlen: integer;
    wie_viele_zeilen: integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Zufallszahlen:Array[1..250] of integer;

type
 wordlist = class
  private
   NumberOfWords: integer;
   word: array[1..100] of string;
end;

var WList1: wordlist;


implementation

{$R *.dfm}

procedure TForm1.ENDE1Click(Sender: TObject);
begin

  close;

end;

procedure TForm1.Reihenfolge1Click(Sender: TObject);
begin

  Unit3.OKBottomDlg1.ShowModal;
  Anzahl_Zufallszahlen:=StrToInt(Unit3.OKBottomDlg1.Edit1.text);

end;

procedure TForm1.Reihenfolge;
begin

//weitermachen


end;

procedure TForm1.Zufalls_Zahlen(Anzahl:integer);
Var i: integer;
begin
  randomize;
  for i:=1 to Anzahl_Zufallszahlen do begin
    Zufallszahlen[i]:=random(wie_viele_zeilen+1);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  WList1:= wordlist.Create;
  wie_viele_zeilen:=0;
  AssignFile(wordlist1,'wordlist1.txt');
  reset(wordlist1);

    while not EoF(wordlist1) do begin
      readln(wordlist1);
      inc(wie_viele_zeilen);
    end;
  CloseFile(wordlist1);
end;

procedure TForm1.WortWandel;
var zeile: string; i,h,a: integer;
begin
  WList1.NumberOfWords:=0;

// Textdatei wird lesbar gemacht

  AssignFile(wordlist1,'wordlist1.txt');
  reset(wordlist1);

  // Einlesen bestimmter Zeilen der Textdatei

    a:=1;

    for h:=1 to Anzahl_Zufallszahlen do begin
      for i:=1 to (Zufallszahlen[a]-1) do begin
        readln(wordlist1,zeile);
        WList1.word[i]:=zeile;
        inc(a);
      end;
    end;
    WList1.NumberOfWords:=a;
  CloseFile(wordlist1);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WList1.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var i,h:integer;
begin

Zufalls_Zahlen(Anzahl_Zufallszahlen);
WortWandel;

For i:=1 to Anzahl_Zufallszahlen do begin
  memo1.Lines.Add(IntToStr(Zufallszahlen[i])); //--->>> hier is der FEHLER
end;

For h:=1 to Anzahl_Zufallszahlen do begin
  memo1.lines.add(WList1.word[h]);
end;

end;

end.
so, das ist der komplette code...

was das macht: ich bekomm ne liste von zufallszahlen, voneiner bestimmten angegebenen Anzahl die sich zwischen 1 und der anzahl der zeilen eines textdokuments befinden... anhand dieser zahlen wird eine zufällige zeile des textdokuments angewählt, das wort wird in meine eigene class gespiechert.

wortwandel sucht nach den zufallszahlen die wörter aus der textdatei...

hoffe ihr könnt mir helfen, is ziemlich viel code...

grenzgaenger 3. Sep 2008 21:42

Re: komische Fehlermeldung, was bedeutet das?
 
und in welcher zeile tritt der fehler denn auf? :glaskugel:

Sh4dd4r 3. Sep 2008 21:49

Re: komische Fehlermeldung, was bedeutet das?
 
sry, in zeile 8 von unten, ends mit gezählt... die schleife mit dem i

omata 3. Sep 2008 21:53

Re: komische Fehlermeldung, was bedeutet das?
 
Das ist eine Leerzeile!

grenzgaenger 3. Sep 2008 21:53

Re: komische Fehlermeldung, was bedeutet das?
 
zeile 8 ?

Delphi-Quellcode:
For i:=1 to Anzahl_Zufallszahlen do begin
  memo1.Lines.Add(IntToStr(Zufallszahlen[i]));
end;
// <<  hier ????
For h:=1 to Anzahl_Zufallszahlen do begin
  memo1.lines.add(WList1.word[h]);
end;

end;

end.
das wäre mir neu ...

grenzgaenger 3. Sep 2008 21:55

Re: komische Fehlermeldung, was bedeutet das?
 
welche funktionen rufst du denn zuvor auf?

Sh4dd4r 3. Sep 2008 21:59

Re: komische Fehlermeldung, was bedeutet das?
 
zeile 10 mit leerzeilen und zeile 8 ohne die leerzeilen mitzuzählen...

habs im quellcode markiert...

grenzgaenger 3. Sep 2008 22:02

Re: komische Fehlermeldung, was bedeutet das?
 
drückst du davor irgend etwas oder manipulierst du die variable zuvor?

wenn sie 0 ist, wie i.a.R. bei der objektinitialization dann geht er nicht in die schleife.. und dann kommts auch zu keinen fehlern...

also, so ist das nicht zu erklären...

was machst du davor...?

ansonsten noch 'n tipp: setz einen breakpoint kurz vor der fehlerstelle und steppe mit F7, F8 durch deinen code...

Meflin 3. Sep 2008 22:03

Re: komische Fehlermeldung, was bedeutet das?
 
Zitat:

Zitat von Sh4dd4r
zeile 10 mit leerzeilen und zeile 8 ohne die leerzeilen mitzuzählen...

Wie gesagt ;)
Code:
For i:=0 to Anzahl_Zufallszahlen - 1 do begin

grenzgaenger 3. Sep 2008 22:05

Re: komische Fehlermeldung, was bedeutet das?
 
welchen wert hat denn I?


Zitat:

Zitat von Meflin
Wie gesagt ;)
Code:
For i:=0 to Anzahl_Zufallszahlen - 1 do begin

nö, nicht ganz... er hat kein dyn. array sondern eins statisches weches von 1..250 geht.. daher muss i mind. 1 sein und höchstens 250 ..

Meflin 3. Sep 2008 22:14

Re: komische Fehlermeldung, was bedeutet das?
 
Zitat:

Zitat von grenzgaenger
nö, nicht ganz... er hat kein dyn. array sondern eins statisches weches von 1..250 geht.. daher muss i mind. 1 sein und höchstens 250 ..

Tatsächlich... :stupid: So genau hab ichs garnicht angekuckt :mrgreen:

Aber wenn er da ne AV bekommt, MUSS es ja quasi an einem ungültigen i liegen :!:

grenzgaenger 3. Sep 2008 22:15

Re: komische Fehlermeldung, was bedeutet das?
 
Zitat:

Zitat von Meflin
Zitat:

Zitat von grenzgaenger
nö, nicht ganz... er hat kein dyn. array sondern eins statisches weches von 1..250 geht.. daher muss i mind. 1 sein und höchstens 250 ..

Tatsächlich... :stupid: So genau hab ichs garnicht angekuckt :mrgreen:

Aber wenn er da ne AV bekommt, MUSS es ja quasi an einem ungültigen i liegen :!:

z.b. wenn i = 0 ist .. . :twisted:

ps: da kommt er aber normal nicht rein, nur wenn er zuvor irgend was anderes macht ... und die obergrenze von 0 nach oben verschiebt... ;-)

omata 3. Sep 2008 22:17

Re: komische Fehlermeldung, was bedeutet das?
 
Bereichsprüfung aktivieren + Debugger benutzen!

Welchen Wert hat Anzahl_Zufallszahlen?

Sh4dd4r 4. Sep 2008 08:00

Re: komische Fehlermeldung, was bedeutet das?
 
Anzahl_Zafuallszahlen bekommt den Wert den der Benutzer in einem dialog eingibt, im testfall war das meißtens 10...

wie soll i denn 0 werden? meine prozeduren geben keine werte zurück und da wo die i schleife selbst steht wird i außerhalb der schleife nicht verwendet...

QuickAndDirty 4. Sep 2008 08:44

Re: komische Fehlermeldung, was bedeutet das?
 
geht das
Delphi-Quellcode:
{$O-}
{$W+}
procedure TForm1.Button1Click(Sender: TObject);
Var i,h:integer;
begin

//Zufalls_Zahlen(Anzahl_Zufallszahlen);
Zufallszahlen[1] := 234
Zufallszahlen[2] := 4554;
Zufallszahlen[3] := 213;
Zufallszahlen[4] := 4654;
Zufallszahlen[5] := 124;
Zufallszahlen[6] := 123234;
Zufallszahlen[7] := 234;
Zufallszahlen[8] := 234;
Zufallszahlen[9] := 9342;
Zufallszahlen[10] := 234;
Anzahl_Zufallszahlen := 10;

WortWandel;

For i:=1 to Anzahl_Zufallszahlen do begin
  memo1.Lines.Add(IntToStr(Zufallszahlen[i])); //--->>> hier is der FEHLER
end;

For h:=1 to Anzahl_Zufallszahlen do begin
  memo1.lines.add(WList1.word[h]);
end;
{$O+}
{$W-}

Sh4dd4r 4. Sep 2008 10:38

Re: komische Fehlermeldung, was bedeutet das?
 
ich bin es schritt für schritt durchgegangen und habs hinbekommen... jetzt hab ich nurnoch 1 problem. wenn ich mein programm starte und eine bestimmte sache mache hängt es sich auf, ohne fehlermeldung... das liegt normalerweise an einer endlosschleife oder? oder kann es noch an etwas anderem liegen?

könnte es sein dass eine for i:=1 to 2800 schleife zu lange braucht? hier hab ich sie:

Delphi-Quellcode:
procedure TForm1.WortWandel;
var zeile: string; b,h,a: integer;
begin
  WList1.NumberOfWords:=0;

// Textdatei wird lesbar gemacht

  AssignFile(wordlist1,'wordlist1.txt');
  reset(wordlist1);

  // Einlesen bestimmter Zeilen der Textdatei

    a:=1;

    for h:=1 to Anzahl_Zufallszahlen do begin
      for b:=1 to (Zufallszahlen[a]-1) do begin
        readln(wordlist1);
        inc(a);
      end;
      readln(wordlist1,zeile);
      WList1.word[h]:=zeile;
    end;
    WList1.NumberOfWords:=a;
  CloseFile(wordlist1);
end;
die schleife mit b läuft bis zu einer zufallszahl (damit wird eine zufällige zeile aus einem textdokument angewählt und anschließend in ein array gespeichert.
schleife mit h wird so oft durchlaufen, wieviele zufällige zeilen der benutzer möchte... hab im testlauf da mal 10 angegeben. kann das den pc überlasten oder länger als 1 sek dauern?

spaxxn 4. Sep 2008 10:56

Re: komische Fehlermeldung, was bedeutet das?
 
Eigentlich heisst: Neue Frage, neuer Thread!

Du erhöhst a bei jedem Schleifendurchlauf... guck dir das mal genau an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz