vielleicht ist es einfach schon zu spät, aber ich verstehe nicht, warum es ein SIGSEGV gibt.
Kurze Erklärung: ich arbeite an einem Programm, dass eine Zeitreihe einliest und filtern soll. Der Code unten ist KEIN lauffähiges Programm sondern zunächst nur ein Code-Stück, dass hoffentlich genug Infos bietet (ich kann ein kleines Testprogramm nachliefern, wenn erforderlich). Aber zunächst will ich nur wissen, ob ich einen Knoten im Hirn habe.
Die Filter-Routine nimmt sich die Rohzeitreihe rawLTS und findet die Indizes der relativen Extreme, die in IdxList (einem dynamischen Integer-Array) gespeichert wird; das funktioniert auch soweit. Anschließend sollen jetzt die entsprechenden Datenpunkte in eine neue Zeitreihe kopiert werden. Dazu die for-Schleife über alle Einträge in IdxList (von 0 bis Length(IdxList) - 1), in der Speicher für einen Datenpunkt mit New allociert wird - darin soll der Punkt aus der Originalliste gespeichert werden, der an die DataList DL mit add angehängt wird (die wird dann zum Schluss nochmal in ein größeres Load-Time-Series-Objekt LTS gepackt).
Code: Alles auswählen
type
{ DataPoint }
TDataPoint = record
Time : double;
Value : double;
end;
{ DataList }
TDataList = Class(TList)
DP : TDataPoint;
end;
function filterLTS (rawLTS : TLTS) : TLTS;
var
IdxList : Array of Integer;
PtrDP : ^TDataPoint;
DL : TDataList;
i, idx : integer;
begin
// ... filter code fills IdxList with indices
// array looks like this IdxList={0,2,4,5,8,10}
DL := TDataList.Create;
for idx := 0 to Length(IdxList) - 1 do
begin
New(PtrDP); // here SIGSEGV with idx=1 ????
i := IdxList[idx];
PtrDP := DataList[i];
DL.Add(PtrDP);
end;
end;
Ich nehme an, es ist was einfaches und ich seh' den Baum vor lauter Wald nicht. Dank für jeden Tipp,
Photor