Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Speicher-Fehler beim create (https://www.delphipraxis.net/196156-speicher-fehler-beim-create.html)

Ykcim 26. Apr 2018 21:47

Speicher-Fehler beim create
 
Hallo Zusammen,

ich versuche mich ganz vorsichtige an Scriptern. Ich habe jetzt folgende Unit geschrieben und frage mich, warum es kracht...
Delphi-Quellcode:
Unit TScripterUnit;
interface

uses Windows, Messages, SysUtils, Variants, Printers, Classes, Graphics,
      Controls, Forms, Dialogs, StdCtrls, ScrMemo, ScrmPS, atScript, atPascal,
      Vcl.ScripterInit;

Type
   TEvent = procedure(Sender: TObject) of object;
   TMyScripter=class
      strict protected
         FScript_Memo_Set: TatCustomScripter;
      private

      public
         constructor create;
         procedure Script_Memo_Ausbuchen_Set (Memo: TMemo; Pfad_SetFile: string);
   end;

var  Script: TMyScripter;

implementation

constructor TMyScripter.create;
begin
   FScript_Memo_Set:=TatCustomScripter.Create(nil); //Hier kracht es
end;

procedure TMyScripter.Script_Memo_Ausbuchen_Set(Memo: TMemo; Pfad_SetFile: string);
var  Code_Memo: TMemo;
begin
   Code_Memo:=TMemo.Create(nil);
   Code_Memo.Lines.LoadFromFile(Pfad_SetFile);
   FScript_Memo_Set.AddComponent(Memo);
   FScript_Memo_Set.SourceCode := Code_Memo.Lines;
   FScript_Memo_Set.Execute;
end;

initialization
  Script := TMyScripter.Create;

finalization
   if Script <> nil then begin
      Script.Free;
   end;
end.
Fehlermeldung:
Delphi-Quellcode:
Erste Gelegenheit für Exception bei $004076E3. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x004076e3: read of address 0xfffffff4'. Prozess iVisitor.exe (6560)

Hat jemand eine Idee, was ich gerade falsch mache?

Vielen Dank
Patrick

Lemmy 26. Apr 2018 22:05

AW: Speicher-Fehler beim create
 
was passiert denn in TatCustomScripter.Create(nil);? vSchon mal mit dem Debugger durch gesteppt?

Ykcim 26. Apr 2018 22:13

AW: Speicher-Fehler beim create
 
Das habe ich versucht: Haltepunkt eingefügt und dann mit F7 weitergegangen - der Fehler tritt sofort auf - beim ersten Mal F7 drücken...

Alallart 26. Apr 2018 22:37

AW: Speicher-Fehler beim create
 
Wenn es in einer Zeile "kracht", muss nicht unbedingt diese eine Zeile dafür verantwortlich sein. Manchmal ist es die Zeile davor. Nur hat dieses Konstrukt aber nur eine Zeile. Warum nur eine?

Was passiert eigentlich wenn du davor inherited an die erste Stelle einfügst? Halte ich jetzt nicht für das Problem, sollte aber auf jeden Fall rein. Schon aus Prinzip.

Dennis07 26. Apr 2018 22:40

AW: Speicher-Fehler beim create
 
Da ich TMS nicht habe und mir auch in naher Zukunft sicher nicht zulegen will, kann ich dir jetzt nicht genau sagen, was da kracht. Aber es muss an dem Konstruktor, bzw. wahrscheinlich eher man Parameter liegen. Wie heißt das Parameter denn, und was wird damit im Konstruktor dann gemacht?

Ykcim 26. Apr 2018 22:43

AW: Speicher-Fehler beim create
 
Das hat leider keinen Effekt. Ich bekomme noch die Info, dass es eine ungültige Zeigeroperation.

Der Constructor bekommt später noch mehr Zeilen.

Vielen Dank
Patrick

Alallart 26. Apr 2018 22:57

AW: Speicher-Fehler beim create
 
Also ich würde in solchem Fall versuchen das Problem einzugrenzen, und vielleicht sowas schreiben

Delphi-Quellcode:
constructor TMyScripter.create;
begin
   inherited;
   FScript_Memo_Set:=nil;
   FScript_Memo_Set:=TatCustomScripter.Create(nil); //Hier kracht es
end;
Wenn er in nun in der Zeile davor hängen bleibt, ist das Problem vor dem Gleichzeichen, sonst dahinter. Nur eine Idee.

Und nur mal als Frage, welche Parameter erwartet TatCustomScripter.Create eigentlich? Kann man das ausnilen?

HolgerX 27. Apr 2018 04:16

AW: Speicher-Fehler beim create
 
Hmm..

TatCustomScripter schein eine 'Custom' Komponente zu sein.
Vielleicht kann man den nicht direkt verwenden, wie z.B. auch TStrings nicht direkt verwendet werden kann, sondern eine davon abgeleitete Class wie TStringList..

Wenn TatCustomScripter eine visuelle Komponente ist, kann es auch sein, das diese einen Owner benötigt, welcher auch gleich als Parent eingetragen wird. Nur bei nil ist da halt keiner.

Anscheinend wird anschließend auf diesen zugegriffen und dann knallt es..

(Alles nur Vermutung, da ich die Kompos nicht habe...)

Der schöne Günther 27. Apr 2018 06:04

AW: Speicher-Fehler beim create
 
Versuche mal ohne diesen initialization/finalization-Horror sondern die globale Variable einfach bei einem Button-Klick oder sonst was zu befüllen.

mkinzler 27. Apr 2018 07:00

AW: Speicher-Fehler beim create
 
Ich vermute auch mal, dass das Problem der fehlende Owner ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.
Seite 1 von 2  1 2      

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