Einzelnen Beitrag anzeigen

Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Wo kommt auf einmal "fpc_shortstr_to_ansistr" her?

  Alt 14. Jan 2012, 17:54
Ich sitze hier gemütlich an einem Programmierprojekt für die Schule (ich soll Bei Google suchenQuarto nachprogrammieren und versuche mich an einer evolutionären KI ), da fliegt mir plötzlich ne AV um die Ohren:
Zitat:
An unhandled exception occurred at $0000000000407FE5 :
EAccessViolation : Access violation
$0000000000407FE5
$0000000000443D03
$00000000004005BC line 66 of evogen.pp
Nach ein bisschen erfolglosen Rumprobieren bin ich dann mal über die Mapfile den Adressen auf den Grund gegangen: Bei $407FE5 handelt es sich um fpc_shortstr_to_ansistr, bei $443D03 um eine eigene Prozedur (RunGeneration), bei $4005BC um PASCALMAIN.
Ich wundere mich über fpc_shortstr_to_ansistr und überprüfe nochmal, ob überall {$longstrings on} eingeschaltet ist. Fehlanzeige, ich habe es nirgendwo vergessen. Umso wunderswerter ist es, dass in der angegebenen Prozedur gar keine Strings benutzt werden. Lediglich zwei andere Prozeduren, die von genannter aufgerufen werden (RunMatch und TestRun) weisen an zwei Stellen welche zu (aber müsste die Adresse nicht auch im Stacktrace auftauchen?). Und zwar von AnsiString zu AnsiString, Shortstrings sind nirgendwo im Spiel.

Nach ein bisschen weiterem erfolglosen Rumprobieren habe ich dann mal in den Assemblercode geschaut. Und tatsächlich, an zwei Stellen (in RunMatch und TestRun jeweils eine) fand sich folgendes:
Code:
call   fpc_shortstr_to_ansistr@PLT
Davor ein FPC_ANSISTR_DECR_REF@PLT und danach ein FPC_ANSISTR_INCR_REF@PLT und ein FPC_ANSISTR_DECR_REF@PLT.

Wo kann das herkommen? Ich zerbreche mir daran jetzt schon 1,5 Stunden den Kopf und finde den Punkt nicht
Das ganze tritt sowohl unter 2.4.2 als auch unter 2.4.4 auf. Ich habe es leider nicht geschafft, das Problem mit einer minimalistischen Demo zu reproduzieren, aber bei Interesse kann ich auch den kompletten Programmcode rausrücken, ich wollte es später sowieso unter der AGPL veröffentlichen.

Mir fällt kein Grund ein, wo das herkommen kann. Bug im FPC? Vielleicht, aber unwahrscheinlich, in 99% der Fälle liegt der Fehler bei einem selber
Aber mir gehen einfach die Ideen aus. Wenn irgendjemandem irgendeine Erklärung einfällt, immer her damit, egal wie unrealistisch sie auch sein mag. Sonst weiß ich nicht mehr weiter
  Mit Zitat antworten Zitat