Ich seh den Fehler nicht. Dieses Problem wurde schon einmal hier im Forum behandelt, aber als Integervariante.
Ich besitze hier eine Stringvariante. Warum funktioniert das nicht.
Fehlermeldung:
Code: Alles auswählen
Project "" hat Exception- Klasse >>External: SIGSEGV<< ausgelöst
Hier mein Code.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,windows;
type tListSortCompare=function(p1,p2:Pointer):integer;
{ TForm1 }
pName=^tName;
tName=record
Vorname,Nachname:String;
end;
TForm1 = class(TForm)
Button1: TButton;
destructor Destroy;override;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Liste:tList;
lstCompare:tListSortCompare;
function lstSortStrVorname(p1,p2:Pointer):integer;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
destructor TForm1.Destroy;
var i:integer;
begin
if Assigned(Liste) then
begin
for i:=0 to Liste.Count-1 do
Dispose(pName(Liste[i]));
end;
inherited Destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
var pN:pName;
iCount:integer;
str:string;
begin
if Assigned(Liste) then
for iCount:=10-1 downto 0 do
begin
pN:=GetMemory(SizeOf(tName));
ZeroMemory(pN, SizeOf(tName));
pN^.Vorname:='Vorname'+intToStr(iCount);
pN^.Nachname:='Nachname'+intToStr(iCount);
liste.Add(pN);
end;
Liste.Sort(lstCompare); {HIER DER FEHLER}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Liste:=tList.create;
end;
function TForm1.lstSortStrVorname(p1,p2:Pointer):integer;
begin
Result:=CompareText(pName(p2)^.Vorname,pName(p1)^.Vorname);
end;
//function TForm1.lstSortStrNachname(p1,p2:Pointer):integer;
//begin
// Result:=CompareText(pName(p2)^.Nachname,pName(p1)^.Nachname);
//end;
end.
Freundliche Grüsse
exc-jdbi