Exception bei TStringList

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
lars2002
Beiträge: 4
Registriert: Do 14. Jan 2010, 18:40

Exception bei TStringList

Beitrag von lars2002 »

Hallo,

versuche grade von Delphi auf Lazarus zu wechseln und irgendwie bekomm ich schon einfachste Sachen nicht hin...

Kann mir jemand sagen wo hier der Fehler ist?

Code: Alles auswählen

procedure TForm2.Button1Click(Sender: TObject);
var 
test : TStringList;
begin    
test.create();
test.add('Test'); (oder auch test.LoadFromFile(test.txt);)
 
test.clear;
end;
Macht beim Ausführen jedesmal in der Zeile Test.add oder auch bei LoadFromFile eine Exception Class "External: SIGSEGV'...

Hat da jemand von euch ne Idee wodran das liegen könnte?

Danke und Gruß,

Lars

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TStringList

Beitrag von theo »

Das geht auch mit Delphi nicht:
test.create();
so:
test:=TStringList.Create;

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Exception bei TStringList

Beitrag von mschnell »

theo hat geschrieben:test.create();
Ist natürlich syntaktisch korrekt, aber nie sinnvoll. Ich habe nie verstanden, warum der Compiler da keine Warnung oder noch besser eine Fehlermeldung generiert.

-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Exception bei TStringList

Beitrag von mse »

mschnell hat geschrieben:Ist natürlich syntaktisch korrekt, aber nie sinnvoll.
Wird zum Beispiel verwendet um Formulare zur Entwurfszeit zu erstellen:

Code: Alles auswählen

function createmainform(const aclass: tclass; 
                    const aclassname: pshortstring): tmsecomponent;
 
begin
 result:= tmsecomponent(aclass.newinstance);
 tcomponent1(result).setdesigning(true); 
          //muss vor create() gesetzt werden um automatisches streamen zu verhindern
 tcustommseform(result).create(nil,false);
 tmsecomponent1(result).factualclassname:= aclassname;
end;
Zuletzt geändert von mse am Do 14. Jan 2010, 21:51, insgesamt 1-mal geändert.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Exception bei TStringList

Beitrag von Hitman »

Da rufst du das ja aber trotzdem von einer Klasse und nicht von einem Objekt auf.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Exception bei TStringList

Beitrag von mse »

Hitman hat geschrieben:Da rufst du das ja aber trotzdem von einer Klasse und nicht von einem Objekt auf.
"result" ist eine Objektinstanz die von der Klasse tmsecomponent abstammt. Die Typenkonvertierung mit tcustommseform(result) ändert daran nichts. Beim IDE-Bau müssen solche unschönen Kniffe leider häufig angewendet werden.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TStringList

Beitrag von theo »

Es hat aber mit dem Beispiel nicht viel zu tun.
Du machst ja:
result:= tmsecomponent(aclass.newinstance);

und nicht result (=nil) tuwas.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Exception bei TStringList

Beitrag von mse »

theo hat geschrieben:Es hat aber mit dem Beispiel nicht viel zu tun.
Es ging darum zu zeigen, dass objectinstanz.create() nicht nie sinnvoll ist wie mschnell schrieb. Ich bitte um Entschuldigung, falls ich das zu wenig klar ausgedrückt haben sollte.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception bei TStringList

Beitrag von theo »

mse hat geschrieben:Entschuldigung, falls ich das zu wenig klar ausgedrückt haben sollte.
Schon OK, das Thema ist ja eigentlich ganz interessant.
Habe hier noch einen Artikel dazu gefunden (Delphi, FPC dürfte ähnlich sein):
http://oreilly.com/catalog/delphi/chapter/ch02.html" onclick="window.open(this.href);return false; zum aktuellen Thema nach dem Titel "Calling a constructor" suchen.

lars2002
Beiträge: 4
Registriert: Do 14. Jan 2010, 18:40

Re: Exception bei TStringList

Beitrag von lars2002 »

Ok so läuft es, das kommt davon wenn die Pausen zwischen zwei Programmen zu groß sind, danke euch ;)

Antworten