wie viele von Euch wissen, programmiere ich gerade an einer Unit für Große Natürliche Und Rationale Zahlen (GNURZ), welche ich im kommenden Monat hier veröffentlichen will.
Um nach Speicherleichen zu suchen, habe ich die HEAPTRC eingespannt. Viele Löcher konnte ich stopfen, doch an folgender Fehlermeldung nage ich nun schon seit über 2 Stunden und komme einfach nicht weiter. Das Programm wird bei einer Berechnung von der heaptrc abgeschossen und es erscheint die Meldung:
Die Meldung kann ich mir zwar übersetzten - sie sagt mir aber nichts. Hier wäre ich sehr froh, wenn mir jemand im Hinblick auf diese Meldung erklären könnte, was da wohl schief gelaufen ist?Marked memory at $B78D3DD8 invalid
Wrong signature $75B556CC instead of CD0931A9
$0806BEC6
$0805ED85
$0805EE50
$08062A76
$0807F73F TGNURZ__GNZGGT, line 504 of gnurz.pas
$0807F71E TGNURZ__GNZGGT, line 503 of gnurz.pas
$0807F71E TGNURZ__GNZGGT, line 503 of gnurz.pas
$0807F71E TGNURZ__GNZGGT, line 503 of gnurz.pas
$0807F71E TGNURZ__GNZGGT, line 503 of gnurz.pas
Das würde mir das Finden des Fehlers wahrscheinlich erleichtern.
Wenn sich jemand für die Hintergründe interessiert:
Der Fehler trat bisher ausschließlich bei der Berechnung des größten gemeinsamen Teilers von 11 und 432476329586135 auf. Das ist auch die einzige Zahlenkombination, bei der ich bisher diesen mysteriösen Fehler gefunden habe - andere Kombinationen klappen einwandfrei lol
Auch berechnet das Programm den ggt dieser beiden Zahlen richtig und ohne Programmabbruch, wenn man die HEAPTRC ausgeschaltet hat.
Die von heaptrc gemeldete Funktion TGnurz.GNZggt ist diese hier:
Code: Alles auswählen
function TGnurz.GNZggt(a,b:GNZTyp):GNZTyp; // Nach modernen Euklidischen Algorithmus
begin
if GNZagleichb(b,GNZNull) then Result:=copy(a) else Result:=GNZggt(b, GNZmod(a,b)); //<--Zeile 503
end;

Viele Grüße, Euklid