:respekt: ... ist bestimmt ein Mountainbike! :haha03:
Fehler in while/endwhile?
-
-
-
Jetzt habe ich schon wieder so ein Problem. Jedes Mal wenn ich compiliere und linke stürzt das Produkt direkt nach dem Start ab. Ich habe auch ältere Sources probiert, die definitiv laufen, aber auch die schmieren ab. Ein Neustart hat nichts gebracht. -.-
-
Ich habe neugestartet, verschiedene Runtimes probiert und den Source mit Breakpoints gefüllt. Es hat nichts geholfen. Erst bricht es bei
dann bei
ab. Es bricht da immer ab.
Funktion Import:Codeproc Import Parameters p$,q$ if FileExists(p$) Return ImportDLL(p$,q$) else Messagebox("Eine benötigte Datei ("+GetFile(p$)+") konnte nicht gefunden werden. Bitte laden Sie dieses Programm erneut herunter!","Fehler",16) ende 1 endif endproc
GetFile und Ende sind erstmal nicht von Belang... -
... und wenn Du jetzt aus diesen Bruchstücken einen kurzen lauffähigen Code bastelts, kann ich mich der Sache annehmen.
Gruß
Roland -
Das ist ja das Problem: Es ist nur bei dem einen Source. Und der ist 4000 Zeilen groß. Wenn ichs lauffähig habe, dann würde es ja gehen. Ich habe Backups von allen Builds vorher, aber, und das obwohl die compiliert und ausgeführt werden konnten, die sind auch nicht mehr ausführbar.
-
Gott, bin ich dumm.
Es tut mir leid, dass ich hier wieder alle in Aufregung versetze. Ich hab mit Franks ZitronenEditor rumgespielt und die gesamten globalen Variablen auskommentiert. Und natürlich sind die immer noch auskommentiert.
-
Sowas ist wohl schon jedem mal passiert.
-
Und mir ständig.
-
Zu deinem Anfangsproblem mal folgender Quellcode:
CodeDeclare Test# dim test#, -11 CLS Print Test# Print SizeOf(Test#) Print String$(Test#, 0) WaitInput
roland: XProfan liefert bei mir (älter XProfan Version) merkwürdigerweise eine Adresse zurück, die man auch wieder freigeben kann. Ist das weiterhin so?
Was ist das für eine Adresse??? Der Speicherbereich scheint ja bereits von anderen Sachen belegt zu sein. -
Hallo Andreas,
der DIM-Befehl erwartet als zweiten Parameter einen Integerwert. Der von Dir genutzte negative Wert wird als vorzeichenloser Integer (32 Bit) interpretiert. Wenn bei älteren XProfan-Versionen also ausreichend GB frei sind, kann dieser Befehl sogar funktionieren.
Unter aktuellem XProfan X2 kommt allerdingas die Meldung, dass soviel Speicher nicht zur Verfügung steht, da hier ein Literal mit Integerwert als Int64 zwischengespeichert wird und somit den freien Speicher bei Weitem übertrifft.
(Natürlich wäre es auch in früheren Versionen möglicherweise geschickter, bei Werten kleiner Null eine entsprechende Fehlermeldung auszugeben. Ich muss zugeben bei dieser - und auch einigen anderen Funktionen - nicht jeden möglichen Schwachsinn oder Tipp-Fehler im Vorraus bedacht zu haben. Bei den Fehlermeldungen in XProfan gibt es sicher noch Luft nach oben.)Ansonsten: Bei aktuelleren XProfan-Versionen wird der zur Verfügung gestellte Speicher mit 0 initialisiert. Das war allerdings nicht immer so. In dem Fall standen da halt Zufallswerte drin, je nachdem was ein anderes Programm, dass den Speicher zuvor nutzte, reingeschrieben hatte. Bei der Freigabe des Speichers wird er in der Regel ja nicht überschrieben.
Gruß
Roland -
Ist eigentlich kein Schwachsinn. Es kann immer passieren, dass man eine Bereich nach einem zurückgelieferten Wert dimensionieren muss und der plötzlich ganz unerwartet negativ ist. Wenn bei der Sache kein Fehler passiert, ist das nicht so schlimm. Ich habe aber eher den Eindruck, dass da gar kein Speicher zugewiesen wird - jedenfalls sehe ich das bei mir im Taskmanager nicht - kann auch sein, dass ich da blind bin...
Meine Bedenken, da ich unter ähnlichen Fehlern wie Jac leide: Wenn da kein Speicher zugewiesen wird, was wird denn dann freigegeben? -
Mmmh... Ich wage es mal, dir ganz gewaltig zu widersprechen. Obwohl ich eine Adresse bekomme, wird dort bei mir kein Speicher reserviert. Wird kein Speicher reserviert, ist die Wahrscheinlichkeit, dass keine zeitweisen Fehler passieren, gleich Null.
-
Wie gesagt: Im aktuellen XProfan tritt das Problem nicht mehr auf.
Und wenn kein Speicher reserviert wird, wird bei DISPOSE auch keiner freigegeben. Allerdings würde dann beim Zugriff auf den vermeintlich reservierten Speicher eine Fehlermeldung erfolgen.
Gruß
Roland -
Zitat von AHT;861260
Es kann immer passieren, dass man eine Bereich nach einem zurückgelieferten Wert dimensionieren muss und der plötzlich ganz unerwartet negativ ist.
XProfan versucht zwar, dem Programmierer möglichst viel "Verwatungskram" abzunehmen, aber in einem solchen Fall kann es prinzipiell nicht schaden, im Programm den zurückgegebenen Wert selbst auf < 0 zu überprüfen.
(In jeder anderen Programmiersprache müsste er dies auch tun!)Gruß
Roland -
Es ist auf jeden Fall nicht dein Kram. Ich bin nur auf der Suche nach einer Fehlerursache, die mich schon seit ein paar Jahren verfolgt. Ich möchte gerne die Ursache finden, das ist alles.
PS: Man kann trotzdem in den Bereich schreiben - und dann passieren auch Fehler! Ob XProfan unter bestimmten Umständen da trotzdem was freigibt, kann ich nicht mit Sicherheit sagen. Das hängt davon ab, wie du das umgesetzt hast. Von dem, was ich bislang da sehe, würde ich sagen: "Du hast Recht!"
Zitat
XProfan versucht zwar, dem Programmierer möglichst viel "Verwatungskram" abzunehmen, aber in einem solchen Fall kann es prinzipiell nicht schaden, im Programm den zurückgegebenen Wert selbst auf < 0 zu überprüfen.
(In jeder anderen Programmiersprache müsste er dies auch tun!)
Andere Programmiersprachen weisen bei der Ausführung im Debugger auf den Fehler hin. Ich bin deshalb erst darauf gestoßen.
Den ersten Teil deiner Aussage kann ich nur doppelt unterstreichen. Ich hatte bislang immer nur auf 0 geprüft und nicht damit gerechnet, dass dort an der speziellen Stelle im Programm auch Werte kleiner 0 auftauchen können. Vielleicht hängt Jacs Code ja auch bei so einer Sache...
Edit:
Nochmal zur Bestätigung von mir... Das von mir hier angesprochene Problem ist in neueren XProfan Versionen gefixt - auch in der von Jac. -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!