kostenloser Webspace werbefrei: lima-city


[Delphi] Wo ist denn dieser s***** Fehler

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    k**********k

    Hallo


    Bin ich blind? Ich finde keinen Fehler in diesem Quelltext:


    procedure TForm1.FormCreate(Sender: TObject);
    var
    map: textfile;
    zeile :string;
    laenge,i,y: integer;
    part: Timage;
    begin
    assignfile(map, 'maps\easy.txt');
    reset(map);

    while eof(map) <> true do begin
    y:=y+1;
    readln(map,zeile);
    laenge:=length(zeile);
    Part:=part.Create(self);
    i:=1;
    for i:=1 to laenge-1 do begin
    if zeile = '0' then begin
    part.Picture.LoadFromFile('images\mauer.jpg'); // Bild festlegen
    part.Left:=(i*60); // Position
    part.Top:=(y*60); // bestimmen
    part.Picture.Free;
    end
    else if zeile = '1' then begin
    part.Picture.LoadFromFile('images\weg.jpg'); // Bild festlegen
    part.Left:=i*60; // Position
    part.Top:=y*60; // bestimmen
    part.Picture.Free;
    end;
    end; // For schleifen ende
    end; // While schleifen ende
    part.Free;
    end;



    Aber es kommt immer die Fehlermeldung:

    Project BPac.exe raised exeption class EStackOverflow with a message 'Stack overflow' Process Stopped

    mfg Ketchup
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Autor dieses Themas

    k**********k

    Achja Noch etwas:

    Ich hab mal gegoogelt und ahbe gefundenn das ein Estackoverflow auftritt wenn

    #1 Eine Endlosschleife im Programm ist

    #2 Eine anwendung zu viel virtullenspeicher braucht

    zu 1#:

    Also entweder ich bin doch blind oder ich habe recht und es ist keine rekursion im Quelltext.

    zu #2:

    Das kann durchaus sein aber ich glaub es nicht.

    Hat jemad eine bessere idee wie ich sowas machen könnte?

    Ich brauch die beiden Schleifen halt um meine Maps individuel zusammen zu setzen.

    mfg Ketchup
  4. r*****r

    RFehtl da nicht noch irgendwo eine Copy anweisung, oder was soll das Programm machen, vermutlich eine Map zeichnen.
  5. Autor dieses Themas

    k**********k

    Danke schon mal für dei Antwort



    RFehtl da nicht noch irgendwo eine Copy anweisung, oder was soll das Programm machen, vermutlich eine Map zeichnen.


    Ich wüsste nicht wo du meinst..



    In einer Datei (easy.txt) Stehen mehere 0en und 1en in mehreren Reihen.

    z.b. So
    010101010111
    101011101010
    ...

    Und jetzt soll das Programm Reiche für Reihe durgehen und für jede 0 das Bild mauer.jpg eifügen ,unf für jede 0 das Bild weg.jpg

    Beitrag geaendert: 20.4.2007 17:58:02 von ketchupfleck
  6. Wenn es am Speicher liegen sollte, dann mach aus den JPG Dateien doch einfach GIF Dateien, die sind in der Regel bei wenig Farben kleiner.
    Außerdem solltest du versuchen die Bilder zu cachen, also nicht immer neu aus der Datei laden. KP, wie das geht, oder ob das überhaupt sinnvoll ist, aber es klingt für mich logisch. ^^
  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ich habe im Code selbst einige Fehler gefunden:
    procedure TForm1.FormCreate(Sender: TObject);
    var
      map: textfile;
      zeile :string;
      laenge,i,y: integer;
      part: TImage;
    
    begin
      AssignFile(map, 'maps\easy.txt'); //Ich würde hier den Pfad mit angeben!
      Reset(map);
    
      while not eof(map) do
      begin
        y := y + 1; //wo hast du y initialisiert??
        ReadLn(map, zeile);
        laenge := length(zeile);
        Part := part.Create(self);
        i := 1; //Das brauchst du nicht!!
        for i := 1 to (laenge-1) do
        begin
          // hier paßt was nicht!
          //da fehlt was in der Art:
          if zeile[i] = '0' then
          begin
            // auch hier würde ich den Pfad angeben!
            part.Picture.LoadFromFile('images\mauer.jpg'); // Bild festlegen
            part.Left := (i*60); // Position
            part.Top := (y*60); // bestimmen
            part.Picture.Free;
          end
            else
              if zeile[i] = '1' then
              begin
                part.Picture.LoadFromFile('images\weg.jpg'); // Bild festlegen
                part.Left:=i*60; // Position
                part.Top:=y*60; // bestimmen
                part.Picture.Free;
              end;
        end; // For schleifen ende
      end; // While schleifen ende
      part.Free;
    end;


    Des weiteren ein paar Sachen:
    - gewöhn' dir einen besseren Stil an, um die Lesbarkeit (auch für dich selbst bei größeren Projekten) zu erhöhen.
    - Was hast du mit dem TImage namens part vor? Du erzeugst es, ja das versteh' ich. Du lädst das Bild, versteh ich auch. Du verschiebst es (Left und Top), und löscht dann das Bild aus dem Speicher (part.Picture.Free)?? Was hast du da vor??
    Versteh' ich nicht!

    Edit: Im Code-Teil wird etwas nicht richtig angezeigt, weil das als kursiv (italic) angezeigt wird: ich habe geschrieben: if zeile(eckige Klammer auf)i(eckige Klammer zu) = '0' then

    Beitrag geaendert: 21.4.2007 16:46:49 von burgi
  8. r*****r

    ich hab hier mal das copy hingeschrieben, wo ich denke, das es hin muss:

    procedure TForm1.FormCreate(Sender: TObject);
    var
      map: textfile;
      zeile,zeichen :string;
      laenge,i,y: integer;
      part: TImage;
    
    begin
      AssignFile(map, 'maps\easy.txt');
      Reset(map);
      y:= 0; // hier
      while not eof(map) do
      begin
        y := y + 1;
        ReadLn(map, zeile);
        laenge := length(zeile);
        Part := part.Create(self);
        for i := 1 to (laenge-1) do
        begin
          // hier das copy()
          zeichen:= copy(zeile,i,1);
          if zeichen = '0' then
          begin
            part.Picture.LoadFromFile('images\mauer.jpg'); // Bild festlegen
            part.Left := (i*60); // Position
            part.Top := (y*60); // bestimmen
            part.Picture.Free;
          end
            else
              if zeichen = '1' then
              begin
                part.Picture.LoadFromFile('images\weg.jpg'); // Bild festlegen
                part.Left:=i*60; // Position
                part.Top:=y*60; // bestimmen
                part.Picture.Free;
              end;
        end; // For schleifen ende
      end; // While schleifen ende
      part.Free;
    end;
  9. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ich glaube nicht, dass der Fehler irgendwo in der Schleife an sich liegt, sondern was er mit dem Bild macht bzw. nicht macht. In der Schleife wird vom TImager der Constructor mehrmals aufgerufen, der Destruktor erst außerhalb der Schleife. Er ändert Left und Top-Werte, obwohl er keinen Parent zugewiesen hat, auf dem das Control verschoben werden soll ...

    @ketchup. Mach mal ein ZIP, und schick's mir, dann schau ich mir das an ...
  10. Autor dieses Themas

    k**********k

    Huch ...

    Mir ist aufgefallen das das völlig schwachsinng ist das ich das bild immer wieder aus dem speicher lösche. Ausserdem muss es zusätzlich noch über ein array laufen, da ja mehere Bilder geladen werden sollen.

    Da sind einige Fehler drin aber selbst wenn ich alles unnötige wegstreiche (hab ich mal in einem anderen Projekt gemacht) kommt immer noch der "Access Violation Error".


    procedure TForm1.FormCreate(Sender: TObject);
    var
    s: string;
    i: timage;
    begin
    s:='0';

    if s[1]= '1' then begin
    i:=i.Create(self);
    i.Top:=0;
    i.Left:=0;
    i.Picture.LoadFromFile('images/weg.jpg');
    i.Height:=60;
    i.Width:=60;
    i.Visible:=true;
    end
    else begin
    i:=i.Create(self);
    i.Top:=0;
    i.Left:=0;
    i.Picture.LoadFromFile('images/mauer.jpg');
    i.Height:=60;
    i.Width:=60;
    i.Visible:=true;
    end;

    end;


    @burgi OK danke (was würde ich nur ohne dich machen XD ) e-mail kommt gleich
  11. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Also ein Fehler ist sicher mal: i := TImage.Create(self) und nicht i := i.Create(self)
  12. Autor dieses Themas

    k**********k

    Achso ein blöder anfänger fehler aber auch.... Mist


    Naja Jetz Passiert folgendes:

    Er bringt mir kein error (juhu) Aber:

    Er zeigt mir trotzdem kein bild an!!
  13. Autor dieses Themas

    k**********k

    Alles klar.

    Der thread kann geschlossen werden.

    Funktioniert alles Prima

    mfg Ketchup
  14. ketchupfleck schrieb:
    Alles klar.

    Der thread kann geschlossen werden.

    Funktioniert alles Prima

    mfg Ketchup

    ***Closed***
    Bei Rückfragen PN an mich

    gruß patrick91
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!