Was bedeutet diese HEAPTRC-Fehlermeldung?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Was bedeutet diese HEAPTRC-Fehlermeldung?

Beitrag von Euklid »

Hallo Leute,

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:
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
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?
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;
Habe die Unit GNURZ.pas, in der der Fehler auftritt, angehängt. Wer will kann da mal reinschauen. Möchte allerdings warnend erwähnen, dass der Code recht undurchsichtig ist, da komplexe Abhängigkeiten zwischen den Funktionen bestehen, welche zudem teilweise rekursiv sind - Freiwillige und Abenteuerlustige vor! ;)

Viele Grüße, Euklid
Dateianhänge
gnurz.pas
(20.7 KiB) 49-mal heruntergeladen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Mit obiger Fehlermeldung scheint niemand etwas anfangen zu können. Der Witz ist, dass sie tatsächlich nur im Fall dieser einen Zahlenkombination aufzutauchen scheint. Ansonsten meldet die heaptrc keine Speicherleichen. Im Quelltext kann ich auch nichts entdecken, was mir verdächtig vorkommt. Das letzte Mal, als ich einen Bug nicht finden konnte, handelte es sich um einen Bug im fpc selbst.

Da es ohne heaptrc keinen Fehler gibt, belasse ich es jetzt dabei und widme meine Zeit wichtigeren Dingen, wie z.B. eine effiziente Multiplikation.

Ich danke allen, die ihre Aufmerksamkeit diesem Thread zugewandt haben.

Viele Grüße, Euklid

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Versuch doch das Gganze so kurz wie möglich zu gestalten und einen Bugreport zu machen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Christian hat geschrieben:Versuch doch das Gganze so kurz wie möglich zu gestalten und einen Bugreport zu machen.
Wenn ich den Fehler nur lokalisieren könnte. Bei anderen Zahlenkombis rechnet er die selben Funktionen, nur in veränderter Reihenfolge durch - hier kommt kein Fehler.
Wenn es mir irgendwann geliegt, den Fehler einzugrenzen und sollte er nicht an meinen Routinen liegen, werde ich selbstverständlich einen Report machen.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Habe den Fehler dank eines Tipps, den mir der af0815 im IRC gegeben hat, gefunden und inzwischen beseitigt.
Danke für Eure Hilfe!

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Übrigends liegt die Vermutung nahe: Dort wo sich so viele Bäume befinden, .... , ist der Wald.

Ich mache unter andern, seit Jahren auch Störungsbehebung in der Firma - unter andern auch an Software. Da bekommt man etwas Übung. Nur die eigenen Softwarefehler findet man meistens nicht, aber dafür habe ich ja auch Kollegen :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten