[gelöst]Fehlermeldung bei TStringlist

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
dmtom
Beiträge: 3
Registriert: Do 21. Mai 2015, 23:03

[gelöst]Fehlermeldung bei TStringlist

Beitrag von dmtom »

Hallo,

leider komme ich bei meinem Programmversuchen nicht mehr weiter. In einer Routine einer eigenen Klasse habe ich folgenden Quellcode:
var hneu:TStringList;
begin
hneu:= TStringList.Create;
hneu.DelimitedText:='Warum geht das nicht?';
hneu.Delimiter:=' ';
freeandnil(hneu);


Leider kommt bei freeandnil(hneu),(hneu.free oder hneu.Clear) immer ein "EXternal SIGSEGV"- Fehler. Woran kann das liegen? Ich bin fankbar für jeden Hinweis.

dmtom
Zuletzt geändert von dmtom am Sa 23. Mai 2015, 11:04, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Fehlermeldung bei TStringlist

Beitrag von Michl »

Hallo dmtom,

eigentlich dürfte es bei dem hier von dir geposteten Code keine Probleme geben. MMn ist der Fehler an einer Stelle anderen Stelle zu suchen.

Als Hinweis möchte ich dir aber mitgeben, dass der Delimiter vor der Übergabe des Textes gesetzt werden sollte. Falls du mal ein anderes Trennzeichen verwendest, geht das sonst schief z.B:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  hneu: TStringList;
begin
  hneu:=TStringList.Create;
  hneu.Delimiter:='_';
  hneu.DelimitedText:='Warum_geht_das_nicht?';
//  Memo1.Lines.Assign(hneu);
  FreeAndNil(hneu);
end; 
PS: Falls es wirklich ein Problem mit dem oben geposteten Code gibt, wäre es intessant, unter welchem Betriebssystem und welcher Lazarusversion dieser Fehler auftritt (ein Minimalbeispiel als Zip, ohne Executable, wäre dann von Vorteil).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

dmtom
Beiträge: 3
Registriert: Do 21. Mai 2015, 23:03

Re: Fehlermeldung bei TStringlist

Beitrag von dmtom »

Danke für die Antwort.

Die Reihenfolge hatte ich schon mehrmals verändert. Den Code hatte ich ebenfalls in einem anderen Programm zu Testzwecken eingebaut-ohne Probleme.

Code: Alles auswählen

 
Type TTeam=class
  private
    { private declarations }
  public
    { public declarations }
       procedure Setze(h:TStringList; Spielermax:integer);
    end;
 
implementation
 
procedure TTeam.Setze(h:TStringList; Spielermax:integer);
 
var hneu:TStringList;
begin 
  hneu:= TStringList.Create;
  hneu.Delimiter:=' ';
  hneu.DelimitedText:='Warum geht das nicht?';
  freeandnil(hneu); 
 
 
Ich arbeite mit lazarus 1.2.6, FRC 2.6.4 unter win7 mit der 32bit-Version. Dieser Routine werde ich jetzt anders realisieren. Interessant wäre aber, an welcher Stelle man den Fehler vermuten/suchen könnte. Für Hinweise bin ich immer zu haben.

dmtom

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Fehlermeldung bei TStringlist

Beitrag von Michl »

K.A., wo da der Fehler ist/war. Wie gesagt, falls es dich wirklich interessiert, dann erstell doch ein Minimalbeispiel und lade es als Zip hier hoch (ohne Exe!).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

dmtom
Beiträge: 3
Registriert: Do 21. Mai 2015, 23:03

Re: Fehlermeldung bei TStringlist

Beitrag von dmtom »

Hallo,

nach einigem Probieren habe ich einige andere Fehler an einer ganz anderen Stellen gefunden. Danach trat der Fehler hier nicht mehr auf. Es scheint mir, dass andere Variablen auf den gleichen Speicherbereich zúgreifen konnten (bei einer fehlerhaften Indizierung). Danach gabs eine Zugriffsverletzung beim Freigeben.

Vielen Dank für die Hilfe.

dmtom

(Das Thema kann geschlossen werden.)

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

Re: Fehlermeldung bei TStringlist

Beitrag von Linkat »

Hallo dmtom,
herzlich willkommen im Lazarusforum.
Hier wird kein Beitrag geschlossen. Wenn der Thread-Ersteller der Ansicht ist, dass der Thread erledigt oder das Problem gelöst ist, so wird er in der Anfangs-Betreffzeile ein "[gelöst]" einfügen.

Viel Spass beim Programmieren mit Lazarus.

Gruß, linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Antworten