Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler in MP_Real.mpf_tohex_n(..) von Wolfgang Ehrhardt (= Gammatester) (https://www.delphipraxis.net/207714-fehler-mp_real-mpf_tohex_n-von-wolfgang-ehrhardt-%3D-gammatester.html)

Andreas13 25. Apr 2021 23:19

Fehler in MP_Real.mpf_tohex_n(..) von Wolfgang Ehrhardt (= Gammatester)
 
Hallo Community,
arbeitet jemand von Euch mit der Routine
Delphi-Quellcode:
MP_Real.mpf_tohex_n(…)
von Wolfgang Ehrhardt (= Gammatester)?

Es ist etwas fehlerhaft dabei, weil bei der Konvertierung einer mp_float-Zahl in einen Hexadezimal-String unerklärliche Access Violation’s in der Zeile
Delphi-Quellcode:
pstr^ := #0;
innerhalb der
Delphi-Quellcode:
Procedure s_mpf_toradix_n(..)
auftreten.
Kennt jemand vielleicht eine Abhilfe?

Danke im Voraus!
Gruß, Andreas

Andreas13 26. Apr 2021 19:11

AW: Fehler in MP_Real.mpf_tohex_n(..) von Wolfgang Ehrhardt (= Gammatester)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe für die Demonstration der Benutzung der fehlerhaften Routine
Delphi-Quellcode:
MP_Real.mpf_tohex_n(...)
ein kleines Konsolen-Testprogramm MPF_ToHex_n_1.dpr erstellt. Hier befindet sich zur Kontrolle auch eine eigene Funktion Dezimal_To_Hex(...), die Multipräzisions-Fließkommazahlen beliebiger Stellenzahl korrekt in einen Hexadezimal-String umrechnet.
Im Programm ist die Stelle markiert, wo ein "Access violation" auftritt.

Wegen des komplexen Zusammenspiels zahlreicher Units und *.inc habe ich auch noch 11 weitere benötigte Original-Files von Gammatester beigefügt. Sollten evtl. weitere Files fehlen, diese sind zu finden unter:

https://github.com/moe123/www.wolfgang-ehrhardt.de

Obwohl meine Function Dezimal_To_Hex(...) die Routine
Delphi-Quellcode:
MP_Real.mpf_tohex_n(...)
ersetzt, wäre ich an der Lösung des Problems trotzdem sehr interessiert, da die fehlerverursachende innere Procedure
Delphi-Quellcode:
s_mpf_toradix_n(...)
in Gammatester’s Bibliotheken an zahlreichen weiteren Stellen intern verwendet wird.

Danke für Eure Hilfe und kritischen Bemerkungen!

Gruß, Andreas
PS: Zielplattform: Win 32 Bit

Anhang: MPF_ToHex_n - 1.zip

Andreas13 26. Apr 2021 21:03

AW: Fehler in MP_Real.mpf_tohex_n(..) von Wolfgang Ehrhardt (= Gammatester)
 
Sebastian Jaenicke hat die Lösung geliefert:
Zitat:

Da du PSt nicht initialisierst, aber angibst, dass an diese Speicherstelle (nil!!) 200 Zeichen hinein passen, kann das nicht gehen...
So geht es z.B.:
Delphi-Quellcode:
SetLength(ASt, 200);
MP_Real.mpf_tohex_n(Wert_Global, 100, PAnsiChar(ASt), 200);
WriteLn('MP_Real.mpf_tohex_n(Wert_Global, 100, PSt, 200); = ', ASt);

Vielen Dank, Sebastian!
Vor lauter Bäumen sehe ich den Wald nicht mehr...:oops::wall:
Gruß, Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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