![]() |
Problem mit ProcedurPointer: Access violation
Hallo Community,
verschiedene Berechnungsfunktionen z.B. MyFunk_1 rufe ich über Procedurpointer auf:
Delphi-Quellcode:
Das funktioniert ohne Probleme, solange sich die Procedure MyFunk_1 im Hauptprogramm (.dpr) befindet. Aber ich habe eine größere Anzahl solcher Berechnungsfunktionen in einer Separaten Unit gesammelt, nennen wie sie einfach Funktionen_Unit.pas
Type
TDynExtendedVektor = TArray<Extended>; TFuncProc = Procedure (X : Extended; CONST Koeff_Vektor : TDynExtendedVektor; VAR Y: Extended; VAR dYdKoeff_Vektor: TDynExtendedVektor); Procedure MyFunk_1(X: Extended; CONST Koeff_Vektor: TDynExtendedVektor; VAR y: Extended; VAR dYdKoeff_Vektor: TDynExtendedVektor); VAR a : TDynExtendedVektor ABSOLUTE Koeff_Vektor; dyda : TDynExtendedVektor ABSOLUTE dYdKoeff_Vektor; Z, S, T: Extended; Begin Z := a[1] + X; S := -1/a[2]; T := -(1 + a[2])/a[2]; dyda[0]:= Power(Z, S); y := a[0]*dyda[0]; dyda[1]:= -a[0]*Power(Z, T)/a[2]; dyda[2]:= y*Ln(Z)/Sqr(a[2]); End;{MyFunk_1} {------------} Procedure Berechnung(x: Extended; CONST Koeff_Vektor: TDynExtendedVektor, VAR y: Extended; VAR Abl_Vektor: TDynExtendedVektor; MyFuncPtr: TFuncProc); Begin MyFuncPtr(X, Koeff_Vektor, y, Abl_Vektor); End;{Berechnung} {--------------} VAR MyFuncPtr: TFuncProc; x, y : Extended; Abl_Vektor: TDynExtendedVektor) Begin ... MyFuncPtr:= MyFunk_1; Berechnung(x, Koeff_Vektor, y, Abl_Vektor, MyFuncPtr); ... Wenn ich nun die Berechnung aus dieser Unit heraus starte:
Delphi-Quellcode:
erhalte ich die Fehlermeldung:
MyFuncPtr:= Funktionen_Unit.MyFunk_1;
Berechnung(x, Koeff_Vektor, y, Abl_Vektor, MyFuncPtr); Eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x00405349: read of adress 0xfbbfe024' aufgetreten Das Programm hält an in: Embarcadero Delphi Memory Manager GETMEM.inc Anweisungszeile: {Get the new first free block} and ecx, [eax - 4] Was mache ich falsch? Danke & Grüße Andreas |
AW: Problem mit ProcedurPointer: Access violation
Zitat:
Versuchs mal ohne. |
AW: Problem mit ProcedurPointer: Access violation
Danke Peter, aber auch ohe ABSOLUTE bleibt die Access violation erhalten.
Andreas |
AW: Problem mit ProcedurPointer: Access violation
Hallo Peter,
jetzt habe ich den Fehler gefunden: Es hat nichts mit der Auslagerung der Funktion zu tun. Die Access violation kam von SetLength(Vektor), weil ich in einer ausgelagerten Tabelle der Berechnungs-Funktionen eine falsche Parameteranzahl eingetragen hatte :wall: Ich schäme mich! :oops: Danke für Deine Hilfe! Viele Grüße, Andreas |
AW: Problem mit ProcedurPointer: Access violation
Meinen Kommentar gelöscht, weil du das Problem anscheinend gelöst hast.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz