Seite 1 von 4
Invalid memory access ProcedureReturn/EndProcedure
Verfasst: 18.07.2008 19:15
von Hyper
Hallo Gefährten,
ich versuche jetzt schon seit über einer Woche, mein Programm, das mit PB 402 sauber funktioniert, mit 420 zu kompilieren. Aber leider hält er immer bei einer Anweisung
an mit
Ich habe vergeblich versucht, einfachere Beispiele aufzubauen. Das gelingt mir nicht. Durch Änderungen (Weglassen von Teilen) bekomme ich den Abbruch auch bei
Lasse ich den Debugger aus, funktioniert es auch nicht.
Deutsches und englische Forum habe ich mehrfach durchsucht, alles alte Beiträge.
Warum tritt das auf? Wenn PB jetzt mit meiner Syntax nicht mehr zufrieden wäre, könnte es das doch ordentlich ausgeben?
Was kann ich tun? Ich würde schon gern auf PB 420 umsteigen...
Verfasst: 18.07.2008 19:22
von marco2007
Ich glaube kaum, daß das ein Bug ist.
Klingt eher wie `ne alte Userlib. Da gibt`s auch oft einen IMA -> meist irgendwo.
Funkt das bei Dir nicht?
Code: Alles auswählen
Procedure test()
ProcedureReturn 5
EndProcedure
Debug test()
lg
Marco
Verfasst: 18.07.2008 19:33
von Little John
Hyper hat geschrieben:Wenn PB jetzt mit meiner Syntax nicht mehr zufrieden wäre, könnte es das doch ordentlich ausgeben?
marco2006 hat geschrieben:Ich glaube kaum, daß das ein Bug ist.
Das glaube ich ebenfalls nicht, und "Invalid memory access" ist wohl auch keine Fehlermeldung bei einem Syntaxproblem.
Gruß, Little John
Verfasst: 18.07.2008 19:41
von Hyper
@marco2006:
Das funktioniert problemlos. Also ich greife auf keine DLL zurück, benutze auch nur Includes von mir...
Verfasst: 18.07.2008 20:00
von marco2007
Dlls sollten eh kein Problem sein.
Und Userlibs? PureColor, PBOSL, Droopy, ...?
Verfasst: 18.07.2008 20:01
von Danilo
Hyper hat geschrieben:Das funktioniert problemlos. Also ich greife auf keine DLL zurück, benutze auch nur Includes von mir...
Kannst Du nochmal genau überprüfen welche Aufrufkonvention die
DLL verwendet? STDCALL oder CDECL?
Dann muß man sie von PB unterschiedlich ansprechen, z.B.
CallFunction -> CallCFunction, CallFunctionFast -> CallCFunctionFast,
Import -> ImportC, Prototype -> PrototypeC
Dadurch kann es zu sehr mysteriösen Fehlern kommen, die manchmal
auch an ganz anderer Stelle auftauchen können, oder es funktioniert
zufällig mit der einen Version, mit der anderen nicht mehr.
Oder es funktioniert außerhalb von Prozeduren, aber nicht innerhalb -
auch ganz typisch für Stackprobleme.
Verfasst: 18.07.2008 20:41
von Kaeru Gaman
Danilo hat geschrieben:Stackprobleme.
ging mir als erstes durch den kopf.
wenn auf dem stack was verwurschtelt wird,
steht in dem moment wo er die rücksprungadresse holen will da irgendwas anderes,
weil zuviel oder zuwenig gePOPt wurde,
und dann springt er ins nirvana und wenn man glück hat gibt es nur einen IMA.
also, der IMA wird schon vom Rücksprung verursacht,
aber was dazu führt ist eine operation auf dem Stack irgendwann vorher.
Verfasst: 18.07.2008 22:25
von Hyper
Danke für Eure Unterstützung.
@Danilo: Das verstehe ich nicht. Ich benutze doch keine DLLs.
Ich habe auch keine anderen eingebundenen Sourcen. Nur alles schön programmiert und teilweise in Includes.
Kann man bei der Installation etwas falsch machen? Ich habe die PureBasic_4_20_(13h4kf).exe heruntergeladen und in ein neues Verzeichnis installiert. PB 402 ist nach wie vor in einem anderen Verzeichnis. Damit muss ich ja produktiv weitermachen.
Verfasst: 18.07.2008 23:12
von NicTheQuick
Springst du vielleicht aus irgendeiner Procedure mit einem Goto raus?
Verfasst: 18.07.2008 23:58
von Hyper
Hi Nic,
lange nichts von Dir gehört! Aber ich habe mir mal Deine Hompage angeschaut. Das Rätzel mit den Dreiecken finde ich gut!
Zum Thema:
a) Goto - natürlich nicht
b) Ich habe etwas wichtiges herausgefunden:
Der Error im ProcedureReturn hängt irgenwie mit der Definition lokaler Variablen zusammen:
1) Protected/Static Anweisung + kompletter Inhalt + ProcReturn -> Error
2) Protected/Static Anweisung + ProcReturn -> Error
3) Nur noch ProcReturn in der Procedure -> OK!
Das ist aber nicht generell. An einer anderen Stelle, kommt der Error nur, wenn lokale Variablendef. + Ein Befehl (egal welcher). Hier crasht es dann bei EndProcedure.
Leider schaffe ich es nicht, ein einfaches Beispiel nachzubauen, da klappt es immer.