AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Problem mit ProcedurPointer: Access violation
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit ProcedurPointer: Access violation

Ein Thema von Andreas13 · begonnen am 14. Mai 2022 · letzter Beitrag vom 14. Mai 2022
Antwort Antwort
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#1

Problem mit ProcedurPointer: Access violation

  Alt 14. Mai 2022, 14:48
Hallo Community,
verschiedene Berechnungsfunktionen z.B. MyFunk_1 rufe ich über Procedurpointer auf:
Delphi-Quellcode:
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);
...
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
Wenn ich nun die Berechnung aus dieser Unit heraus starte:
Delphi-Quellcode:
  MyFuncPtr:= Funktionen_Unit.MyFunk_1;
  Berechnung(x, Koeff_Vektor, y, Abl_Vektor, MyFuncPtr);
erhalte ich die Fehlermeldung:
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (14. Mai 2022 um 15:51 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit ProcedurPointer: Access violation

  Alt 14. Mai 2022, 15:55
Hallo Community,
verschiedene Berechnungsfunktionen z.B. MyFunk_1 rufe ich über Procedurpointer auf:
[DELPHI]
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;


Was mache ich falsch?
Du verwendest "absolute" ohne jede Notwendigkeit, nur um etwas Tipparbeit zu sparen. Böser Andreas
Versuchs mal ohne.
Peter Below
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Problem mit ProcedurPointer: Access violation

  Alt 14. Mai 2022, 16:23
Danke Peter, aber auch ohe ABSOLUTE bleibt die Access violation erhalten.
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Problem mit ProcedurPointer: Access violation

  Alt 14. Mai 2022, 16:39
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
Ich schäme mich!
Danke für Deine Hilfe!
Viele Grüße, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit ProcedurPointer: Access violation

  Alt 14. Mai 2022, 16:57
Meinen Kommentar gelöscht, weil du das Problem anscheinend gelöst hast.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz