![]() |
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 |
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) |
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 |
Re: Zugriffsverletztung ohne grund - ratlos..
Drücke in der IDE F9.
Und wie genau lautet die Fehlermeldung? |
Re: Zugriffsverletztung ohne grund - ratlos..
Liste der Anhänge anzeigen (Anzahl: 1)
ich stell dir mal en screen rein
|
Re: Zugriffsverletztung ohne grund - ratlos..
dein Fehler liegt im OnCreate von Form1
Delphi-Quellcode:
der Syntax lautet
sinfo.Create;
Delphi-Quellcode:
Instanz = Klasse.Create();
|
Re: Zugriffsverletztung ohne grund - ratlos..
WoW danke danke danke danke danke danke du hast mich vor depressionen beschützt :-D
mfg tommy |
Re: Zugriffsverletztung ohne grund - ratlos..
Zitat:
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 ... |
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 |
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); |
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. |
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 |
Re: Zugriffsverletztung ohne grund - ratlos..
@s-off: kein problem :cheers:
@Tommy0014: mit dieser anweisung:
Delphi-Quellcode:
reservierst du speicher auf dem heap der von der Stringlist benutzt wird.
lstMeineStringlist := TStringList.Create;
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:
wird er also freigegeben, allerdings "zeigt" lstMeineStringlist immernoch auf den Platz wo der speicher früher war. besser ist also
lstMeineStringlist.Free
Delphi-Quellcode:
zu verwenden, da hier noch zusätzlich der Zeiger auf NIL (= Not In List) gestellt wird.
FreeAndNil(lstMeineStringlist)
|
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