Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Fehler in MP_Real.mpf_tohex_n(..) von Gammatester
Andreas_500 - Mo 26.04.21 13:37
Titel: Fehler in MP_Real.mpf_tohex_n(..) von Gammatester
Hallo Community,
arbeitet jemand von Euch mit der Routine
MP_Real.mpf_tohex_n(...) von
Gammatester?
Es ist etwas fehlerhaft dabei, weil bei der Konvertierung einer
mp_float-Zahl in einen Hexadezimal-String unerklärliche Access Violations in der Zeile
innerhalb der Procedure
s_mpf_toradix_n(..) auftreten.
Kennt jemand vielleicht eine Abhilfe?
Danke im Voraus!
Gruß, Andreas
Moderiert von Th69: Titel geändert (Realen Namen entfernt).
Moderiert von Th69: User-Link hinzugefügt
Moderiert von Th69: B- durch Delphi-Tags ersetzt
Th69 - Mo 26.04.21 15:22
Hallo und :welcome:
hast du schon eine PN an Gammatester geschickt?
Oder hast du einen Link auf den Source-Code?
Th69 - Mo 26.04.21 16:19
Ups, ja ich hatte damals den Thread gelesen, aber wieder vergessen. :cry:
Th69 - Mo 26.04.21 17:51
Ich sehe jetzt nicht auf Anhieb, in welchem ZIP-Package die Funktion ist.
Könntest du daher den (relevanten) Code der Funktionen mpf_tohex_n(...) sowie s_mpf_toradix_n(...) hier posten?
Und mit welchem Wert rufst du diese Funktion auf? Oder kommt die Access Violation bei jedem Wert?
Andreas_500 - Mo 26.04.21 20:04
Hallo,
ich habe für die Demonstration der Benutzung der fehlerhaften Routine
Delphi-Quelltext
1:
| MP_Real.mpf_tohex_n(…) |
ein kleines Konsolen-Testprogramm MPF_ToHex_n_1.dpr erstellt (Delphi XE5 Pro). 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
MP_Real.mpf_tohex_n(…) ersetzt, wäre ich an der Lösung des Problems trotzdem sehr interessiert, da die fehlerverursachende innere Procedure
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
Moderiert von Th69: Delphi-Tags hinzugefügt
jaenicke - Mo 26.04.21 21:13
Da du PSt nicht initialisierst, aber angibst, dass an diese Speicherstelle (nil!!) 200 Zeichen hinein passen, kann das nicht gehen...
// EDIT:
So geht es z.B.:
Delphi-Quelltext
1: 2: 3: 4:
| 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); |
Andreas_500 - Mo 26.04.21 21:54
@jaenicke
Vielen Dank Sebastian!
Bin wohl blind für die eigenen Fehler... :oops: :autsch:
Gruß, Andreas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!