Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletztung ohne grund - ratlos.. (https://www.delphipraxis.net/99549-zugriffsverletztung-ohne-grund-ratlos.html)

Tommy0014 13. Sep 2007 19:45


Zugriffsverletztung ohne grund - ratlos..
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nabend,
ich hab mit nem kumpel vor ein paar tagen ein programm gemacht und wollte dies um eine option erweitern... es handelt sich hier bei um ein stundenplan wo man die aktuelle infos unten in einer box angezeigt bekommt, des funktioniert auch alles. nun wollt ich noch ein feld machen wo mitschüler infos schreiben können. Dazu lad ich mir ne .txt vom ftp-server runter wo die bsherige infos drin stehen dannach füg ich sein nick und seine nachricht hinzu und lad die datei wieder hoch.. aber genau das klappt nicht das hochladen da kommt dann wie beim start vom programm zugriffsverletztung.. ich hab euch das programm mit quelltext hochgeladen. in dem ordner ist noch ne unti2.pas die wird nicht benötigt des war mein erster versuch mit hilfe von einer 2ten form hat aber auch nicht geklappt und ich weis nicht warum :wall: :wall: :wall: ich würde am liebsten mein rechner zerstören... :evil:

mfg
tommy

s-off 13. Sep 2007 20:34

Re: Zugriffsverletztung ohne grund - ratlos..
 
Starte das Programm aus der IDE heraus und warte bis es knallt. Dann schaust Du wo es knallt und behebst das Problem.

(Ich kann Deine Sourcen leider nicht kompilieren -> unterschiedliche Indy-Versionen)

Tommy0014 13. Sep 2007 20:36

Re: Zugriffsverletztung ohne grund - ratlos..
 
danke für die antwort, aber problem ist sofort beim starten kommt der fehler und ich weis net wie des funktioniert mit dem IDE?

mfg tommy

s-off 13. Sep 2007 20:40

Re: Zugriffsverletztung ohne grund - ratlos..
 
Drücke in der IDE F9.

Und wie genau lautet die Fehlermeldung?

Tommy0014 13. Sep 2007 20:48

Re: Zugriffsverletztung ohne grund - ratlos..
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich stell dir mal en screen rein

SirThornberry 13. Sep 2007 20:52

Re: Zugriffsverletztung ohne grund - ratlos..
 
dein Fehler liegt im OnCreate von Form1
Delphi-Quellcode:
sinfo.Create;
der Syntax lautet
Delphi-Quellcode:
Instanz = Klasse.Create();

Tommy0014 13. Sep 2007 20:58

Re: Zugriffsverletztung ohne grund - ratlos..
 
WoW danke danke danke danke danke danke du hast mich vor depressionen beschützt :-D

mfg
tommy

s-off 13. Sep 2007 21:01

Re: Zugriffsverletztung ohne grund - ratlos..
 
Zitat:

Zitat von Tommy0014
WoW danke danke danke danke danke danke du hast mich vor depressionen beschützt :-D

Oh je - wenn das so schnell bei Dir geht, dann würde ich mir aber überlegen, ob ich mich weiter der Programmierung widme :wink:

Edit: nochetwas - wenn Du etwas explizit erzeugst, dann solltest Du es auch wieder freigeben - hier, Deine Stringliste.

Wenn ich etwas im OnCreate erzeuge, dann gebe ich es im OnDestroy wieder frei
OnShow -> OnClose
...

Tommy0014 13. Sep 2007 21:10

Re: Zugriffsverletztung ohne grund - ratlos..
 
^^ ja ich stand kurz davor xD ^^

wie meinst du des mit freigeben? könntest du bitte ein beispiel machen weil ich mach des net so oft mit TStringlists usw...

mfg
tommy

dominikkv 13. Sep 2007 21:20

Re: Zugriffsverletztung ohne grund - ratlos..
 
das ist fast immer das gleiche:
Delphi-Quellcode:
var Instanz: TKlasse;
  [...]
  Instanz := TKlasse.create({Manchmal mit Argumenten}); // zum erzeugen
  [...] // Mit Instanz arbeiten
  Instanz.free; // zum Freigeben
 
  // Alternativ zu Instanz.Free geht auch
  FreeAndNil(Instanz);

s-off 14. Sep 2007 06:59

Re: Zugriffsverletztung ohne grund - ratlos..
 
Dominik hat schön die allgemeine Syntax beschrieben.

Hier noch ein Beispiel mit einer TStringlist, welche im OnCreate Deiner Mainform erzeugt, und im OnDestroy Deiner Mainform wieder freigegeben wird.

@Dominik
Möchte Dir nicht reinpfuschen - nur ist ein Beispiel, welches auf den aktuellen Fall zugeschnitten ist, für manche einfacher zu verstehen. Das allgemeine Vorgehen ist natürlich noch wichtiger.

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs;

Type
   TForm1 = Class(TForm)
      Procedure FormCreate(Sender: TObject);
      Procedure FormDestroy(Sender: TObject);
   private
      lstMeineStringlist: TStringlist; //Deklaration unserer zukünftigen Instanz einer TStringlist
   End;

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.FormCreate(Sender: TObject);
Begin
   lstMeineStringlist := TStringList.Create; //Die Stringliste erzeugen
End;

{
[...]
Hier stehen die Methoden, in denen mit der Stringliste gearbeitet wird.
[...]
}

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
   FreeAndNil(lstMeineStringlist); //Die Stringliste wieder freigeben
End;

End.

Tommy0014 14. Sep 2007 12:25

Re: Zugriffsverletztung ohne grund - ratlos..
 
ah ok danke, werd ich mal ausprobieren, aber noch eine frage was bringt mir das freigeben einer tstringlist?


mfg
tommy

dominikkv 14. Sep 2007 12:51

Re: Zugriffsverletztung ohne grund - ratlos..
 
@s-off: kein problem :cheers:

@Tommy0014:
mit dieser anweisung:
Delphi-Quellcode:
lstMeineStringlist := TStringList.Create;
reservierst du speicher auf dem heap der von der Stringlist benutzt wird.
wenn du die Stringliste nicht mehr brauchst kannst du den speicher freigeben, damit andere programme (oder dein programm) diesen speicher wieder benutzen kann und anschließend mit "Destroy" freigegeben wird.
Dies kannst du mit dem destruktor "Destroy" machen, allerdings ist es sicherer den speicher mit "free" freizugeben da bei "free" zuerst geprüft wird ob überhaupt speicher da ist den man freigeben kann.

mit
Delphi-Quellcode:
lstMeineStringlist.Free
wird er also freigegeben, allerdings "zeigt" lstMeineStringlist immernoch auf den Platz wo der speicher früher war. besser ist also
Delphi-Quellcode:
FreeAndNil(lstMeineStringlist)
zu verwenden, da hier noch zusätzlich der Zeiger auf NIL (= Not In List) gestellt wird.

Tommy0014 14. Sep 2007 13:44

Re: Zugriffsverletztung ohne grund - ratlos..
 
ah ok danke, weil ich dachte was bringt mir das nun versteh ich es... danke an euch :thumb: :thumb: :thumb:

mfg
tommy


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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