Thema: Delphi Fehler: Out of Memory

Einzelnen Beitrag anzeigen

RedDust

Registriert seit: 26. Okt 2004
Ort: Könnern
96 Beiträge
 
Delphi 2005 Personal
 
#3

Wo ein Wille ist, ist auch ein weg

  Alt 10. Jan 2005, 19:31
Also es gibt eine Methode die ich oft anwende sind übergreifende Units, 1. behält man die übersicht und 2. findet man schneller Fehler. Hier mal, wie ich das Prob. lösen würde.

1. Unit

Delphi-Quellcode:
unit variablen;

interface

uses controls;

type TKontakt = record
        Name : string[255];
        Vorname : string[255];
        Geburtstag : TDate;
     end;

     TZeiger = ^TInhalt;

     TInhalt = record
       Inhalt : TKontakt;
       Next : TZeiger;
       Prev : TZeiger;
     end;

var z_akt, z_akt2, z_kopf, z_ende : TZeiger;
    v_dat : FILE OF TKontakt;
    VCard : TKontakt;

implementation

end.
2. Unit

Delphi-Quellcode:
unit prozeduren;

interface

uses variablen;

procedure p_laden;
procedure p_uebernehmen(kontakt : TKontakt);
procedure p_speichern;

implementation

uses haupt;

procedure p_laden;
begin
  AssignFile(v_dat, ExtractFilePath(Application.ExeName) + 'daten.lst');
  Reset(v_dat);
      WHILE NOT EOF(v_dat) DO
        BEGIN
          IF z_akt = NIL THEN
            BEGIN
              New(z_akt);
              Read(v_dat,z_akt^.Inhalt);
              z_kopf := z_akt;
              z_ende := z_akt;
              z_akt^.Prev := NIL;
              z_akt^.Next := NIL;
            END
          ELSE
            BEGIN
              new(z_akt2);
              z_akt^.Next := z_akt2;
              z_akt^.Next^.Prev := z_akt;
              z_akt := z_akt2;
              Read(v_dat,z_akt^.Inhalt);
              z_ende := z_akt;
              z_akt^.Next := NIL;
            END;
        END;
  z_akt := z_kopf;
end;

procedure p_uebernehmen;
begin
  IF ueberschreiben THEN
    BEGIN
      z_akt^.Inhalt := kontakt;
    END
  ELSE
  IF z_akt = NIL THEN
    BEGIN
      New(z_akt);
      z_akt^.Inhalt := kontakt;
      z_kopf := z_akt;
      z_ende := z_akt;
      z_akt^.Prev := NIL;
      z_akt^.Next := NIL;
    END
  ELSE
    BEGIN
      new(z_akt2);
      z_akt^.Next := z_akt2;
      z_akt^.Next^.Prev := z_akt;
      z_akt := z_akt2;
      z_akt^.Inhalt := kontakt;
      z_ende := z_akt;
      z_akt^.Next := NIL;
    END;
end;

procedure p_speichern;
begin
  IF z_akt <> NIL THEN
    BEGIN
      z_akt := z_kopf;
      AssignFile(v_dat, ExtractFilePath(Application.ExeName) + 'dateiname.endung');
      Rewrite(v_dat);
      WHILE z_akt^.Next <> NIL DO
        BEGIN
          Write(v_dat,z_akt^.Inhalt);
          z_akt := z_akt^.Next;
        END;
      Write(v_dat,z_akt^.Inhalt);
      CloseFile(v_dat);
    END;
end;


end.
Is aber nur 'n Vorschlag. Sollten noch Fragen auftreten, immer stellen.
Mario Franze
  Mit Zitat antworten Zitat