Access Violation bei Stringlisten unter FPC

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Access Violation bei Stringlisten unter FPC

Beitrag von Linkat »

Hallo,
versuche gerade unter FPC mit Stringlisten zu arbeiten.
Habe die Unit "classes" in die uses-Zeile eingefügt, in der Variablen-Deklaration strlist vom Typ TStrings definiert und im Hauptprogamm die Methoden strlist.create, strlist.Add(s1) und strlist.free benutzt. Der Kompiler bringt eine Warnung:

Code: Alles auswählen

sort2.pas(26,17) Warning: Constructing a class "TStrings" with abstract methods


Nach dem Start des Programmes kommt dann die Fehlermeldung:

Code: Alles auswählen

An unhandled exception occurred at $08048278 :
        EAccessViolation : Access violation $08048278


Hier der Beispielcode:

Code: Alles auswählen

program sort2;
uses crt,classes;
const max = 100;
 
var s1             :string;
     i             :integer;
     strlist        :TStrings;
 
function str5  :string;
var s     :string[5];
     a,i   :byte;
     ch    :char;
begin
  s:='';
  for i:=1 to 5 do begin
    a:=random(26)+65;
    ch:=chr(a);
    s:=s+ch;
  end{for i}
  str5:=s;
end; {str5}
 
begin
  randomize;
  ClrScr;
  strlist.create;
  for i:=1 to max do begin
    s1:=str5;
    writeln(i:6,'  ',s1);
    strlist.add(s1);
  end;
  strlist.free;
end.


Was mach ich falsch?

Gruß, Linkat
PS: wenn ich die Variable strlist anstatt TStrings dem Typ TStringlist zuordne, ist das gleiche Problem.

Lazarus 0.9.22 unter Suse 10.0 bzw. 10.2

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

Beitrag von theo »

TStrings kann man nicht direkt instantiieren (abstrakte Basisklasse).
Erst eine TStringlist kann man direkt gebrauchen.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo theo,
wie ich bereits oben erwähnte. Mit TStringList kommt zwar keine Warnung nach dem Compilieren, aber nach dem Starten des Programms kommt die gleiche Fehlermeldung.

Gruß, Linkat

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

Beitrag von theo »

Ach so, jetzt seh ich ihn! Der alte Anfängerfehler ;-)

Das geht nicht:
strlist.create;

So geht das:
strlist:=TStringList.Create;

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Vielen Dank theo.

Mit strlist:=TStringList.Create funktioniert es jetzt.

Du hast recht, mit TStrings kommt die Warnung vom Compiler, und nach dem Programmstart der Fehler.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Nur so als Info: Die AV kommt weil strlist nicht Installisiert wurde.

Meisten kommt die AV immer nur dann wenn eine Variable nicht Installisiert wurde !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

interessante Wortschöpfung, also entweder:
initialisiert
oder
installiert

und du meinst wohl ersteres ;)
Johannes

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Initialisiert, damit habe ich immer Probleme
leider kann ich dieses Wort nicht zu meiner rechtschreibhilfe hinzufügen, weil es richtig geschrieben wurden ist von dir :(
und wenn ich es falsch schreibe findet er das Wort nicht in seiner liste !
MFG
Michael Springwald

Antworten