 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.07.2013, 00:10 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Dann müsste der aber bei der Version 1.9 auch schon zu Fehlern führen! |
Nein, das ist die typische Art fehler, die je nach Umgebungsbedingungen zu einem komplett zufälligen Zeitpunkt sichtbar werden kann, und ob so ein Fehler überhaupt sichtbar wird kann unter anderem auch daran liegen, wie das Programm kompiliert wird - wenn man zusätzlichen Code hinzufügt oder löscht, kann dadurch der Fehler verschleiert werden oder überhaupt erst sichtbar werden.
Zitat: | Bin mir aber sicher, dass das nicht die Lösung ist! |
Ja, natürlich, es ist viel wahrscheinlicher, dass die IDE schuld ist, als dass ein PEBCAK-Problem vorliegt...  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 00:19 Titel: |
|
|
Jojo hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Dann müsste der aber bei der Version 1.9 auch schon zu Fehlern führen! |
Nein, das ist die typische Art fehler, die je nach Umgebungsbedingungen zu einem komplett zufälligen Zeitpunkt sichtbar werden kann, und ob so ein Fehler überhaupt sichtbar wird kann unter anderem auch daran liegen, wie das Programm kompiliert wird - wenn man zusätzlichen Code hinzufügt oder löscht, kann dadurch der Fehler verschleiert werden oder überhaupt erst sichtbar werden.
Zitat: | Bin mir aber sicher, dass das nicht die Lösung ist! |
Ja, natürlich, es ist viel wahrscheinlicher, dass die IDE schuld ist, als dass ein PEBCAK-Problem vorliegt...  |
Da müssen noch mehr Speicherverletzungen vorliegen? Das Problem ist immer noch vorhanden! Das wird mich noch eine Weile beschäftigen!
 _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.07.2013, 00:39 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | nemored hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Die Variable "aufgedeckteKarten" hat nichts mit den bereits entfernten Karten zu tun! Die ist nur dafür da, dass der Computer weiß welche Karte schon mal aufgedeckt wurde. Diese Variable kann ruhig den Wert 65 haben! |
Bist du dir da ganz sicher? Ein Speicherzugriffsfehler ist und bleibt ein Speicherzugriffsfehler, und das ist keine gute Idee. Dabei kann fälschlicherweise auf alle möglichen Werte zugegriffen werden. |
Dann müsste der aber bei der Version 1.9 auch schon zu Fehlern führen!
|
ein GANZ klares NEIN.
Bei Speicherzugriffsfehlern passieren allerhand "komische Dinge".
Und schon eine einzige neue Zeile im Source kann den Compiler dazu bewegen, seine Variablen anders im Speicher anzuordnen, wodurch durch diesen (deinen!) Speicherzugriffsfehler GANZ andere Effekte hervorgerufen werden.
edit: falls du wirklich daran interessiert bist, den Fehler zu finden, und falls du zumindest ein Terminal bedienen kannst, so rate ich dir dringend, dein Programm mit Fehlerchecks (-exx), und/oder Debugginginformationen (-g) zu kompilieren.
-exx wird vermutlich alles bereits finden. Wenn nicht, lass dein Programm durch valgrind laufen, das sagt dir detailliert was wo warum kaputtgeht.
(nicht dass ich die Hoffnung zu obiger Annahme haette...) _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Zuletzt bearbeitet von Flo am 15.07.2013, 00:43, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 00:41 Titel: |
|
|
Flo hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | nemored hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Die Variable "aufgedeckteKarten" hat nichts mit den bereits entfernten Karten zu tun! Die ist nur dafür da, dass der Computer weiß welche Karte schon mal aufgedeckt wurde. Diese Variable kann ruhig den Wert 65 haben! |
Bist du dir da ganz sicher? Ein Speicherzugriffsfehler ist und bleibt ein Speicherzugriffsfehler, und das ist keine gute Idee. Dabei kann fälschlicherweise auf alle möglichen Werte zugegriffen werden. |
Dann müsste der aber bei der Version 1.9 auch schon zu Fehlern führen!
|
ein GANZ klares NEIN.
Bei Speicherzugriffsfehlern passieren allerhand "komische Dinge".
Und schon eine einzige neue Zeile im Source kann den Compiler dazu bewegen, seine Variablen anders im Speicher anzuordnen, wodurch durch diesen (deinen!) Speicherzugriffsfehler GANZ andere Effekte hervorgerufen werden. |
Dann suche ich jetzt mal das Programm nach Speicherzugriffsfehlern!
Wenn, dann sind da noch welche vorhanden!
Danke für eure Hilfe!!! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.07.2013, 00:44 Titel: |
|
|
Hinweis: ich habe obigen Post gerade editiert:
ich hat Folgendes geschrieben: | edit: falls du wirklich daran interessiert bist, den Fehler zu finden, und falls du zumindest ein Terminal bedienen kannst, so rate ich dir dringend, dein Programm mit Fehlerchecks (-exx), und/oder Debugginginformationen (-g) zu kompilieren.
-exx wird vermutlich alles bereits finden. Wenn nicht, lass dein Programm durch valgrind laufen, das sagt dir detailliert was wo warum kaputtgeht.
|
_________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 00:50 Titel: |
|
|
Flo hat Folgendes geschrieben: | Hinweis: ich habe obigen Post gerade editiert:
ich hat Folgendes geschrieben: | edit: falls du wirklich daran interessiert bist, den Fehler zu finden, und falls du zumindest ein Terminal bedienen kannst, so rate ich dir dringend, dein Programm mit Fehlerchecks (-exx), und/oder Debugginginformationen (-g) zu kompilieren.
-exx wird vermutlich alles bereits finden. Wenn nicht, lass dein Programm durch valgrind laufen, das sagt dir detailliert was wo warum kaputtgeht.
|
|
Sicher will ich den Fehler finden! Jetzt erst recht!
-exx bzw. -g kenne ich gar nicht mal? Kann man damit Fehlersuche machen? Wie funktionieren die beiden Funktionen/Tools?
Debug müsste ich schon mal irgendwo gelesen haben!
Danke für die Tipps!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 957 Wohnort: Austria
|
Verfasst am: 15.07.2013, 01:29 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Dann müsste der aber bei der Version 1.9 auch schon zu Fehlern führen! | Nein - es kann, aber es muss nicht. Es muss nicht auf jedem Computer zu einem (diesen) Fehler kommen. Es kann nur unter bestimmten Umständen (wenn bestimmte andere Programme (nicht) laufen; wenn bestimmte Hardware (nicht) vorhanden ist, ...) eben zu Fehlern kommen. Möglicherweise wird durch externe Faktoren das Auftreten des Fehlers verhindert.
ALWIM hat Folgendes geschrieben: | Bei einem weiteren Test konnte ich feststellen, dass der Computermodus einwandfrei funktioniert!!! Eine Textdatei mit den Werten ob ein Kartenpaar bereits gefunden wurde, sagt mir dass alles korrekt funktioniert! Demnach kann der Computer bei Version 1.9 keine Karte nehmen die schon aus dem Spiel ist! Bei mittlerweile 15 Tests kein einziger falscher Computerzug! | Nein, mit so einem Test kannst du nicht feststellen, das das Programm oder Teile davon korrekt funktionieren (allgemein). Wenn du 15 Tests durchgeführt hast, könnte der 16. Test einen Fehler auslösen; wenn du 10000 Tests machst, der 10001.Test usw. - du kannst durch Tests nicht feststellen dass ein Code korrekt ist. Du kannst vielleicht feststellen, dass er zu einer gewissen Wahrscheinlichkeit funktioniert, aber mehr (Aussagen mit größerer Zuverlässigkeit) kannst du mit diesen Methoden nicht ermitteln.
ALWIM hat Folgendes geschrieben: | Es kann natürlich sein, dass dann bei mehr Zeilen das Programm auf Grund der von dir festgestellten Sache nicht mehr korrekt funktioniert! Das wäre theoretisch möglich!
Das werde ich jetzt gleich mal testen! Bin mir aber sicher, dass das nicht die Lösung ist! | Das ist sogar praktisch möglich. Über die Wahrscheinlichkeit, dass dies die Ursache des Fehlers ist, will ich jetzt gar nicht spekulieren - die Möglichkeit besteht (auch wenn die Wahrscheinlichkeit klein wäre).
Zusammenfassend hoffe ich, dass du folgendes erkannt hast:
- Auch wenn dein Programm "gleich" sein mag läuft es bei jedem Start üblicherweise unter neuen externen Bedingungen (Unterschiedliche Hardware, Unterschiedliches Betriebsystem, Unterschiedliche parallel laufende Programme, Unterschiedliche Systemzeit, Unterschiedlicher Speicherinhalt/Aufteilung (Stichwort Speicherrandomisierung), ...). Der Fehler kann manchmal in Erscheinung treten - andere Male nicht; er ist auf jedenfall immer im Programm vorhanden.
- Mit Tests kann man keine Richtigkeit von Programmen beweisen. Es ist eine Methode, um Fehler zu finden, die man anschließend beseitigen sollte; aber viele Fehler bleiben unentdeckt. Wieso glaubst du werden immer wieder neue Sicherheitslücken und Fehler für Software bekannt, de bereits Jahrzehnte auf dem Markt ist. Die wurde wohl öfter getestet als du dir das überhaupt vorstellen könntest.
- Schließe niemals eine Möglichkeit ohne handfesten Beweis aus. Und selbst dann gäbe es die Möglichkeit, dass sich ein Fehler im Beweis eingeschlichen hat. Suche zuerst den Fehler bei DIR SELBST, und zwar aus einem einfachen Grund: Compiler und IDE haben bereits mehrere tausend, zehntausend oder noch mehr Menschen getestet und für funktionstüchtig befunden. Das schließt einen Fehler nicht aus, macht die Wahrscheinlichkeit aber sehr klein. Dein Programm hingegen wurde von dir und ein paar wenigen anderen Leuten getestet - einer Personenmenge, die um Zehnerpotenzen kleiner ist, als die der FBC/IDE-Tester, was natürlich die Fehlerwahrscheinlichkeit entsprechend erhöht.
- Befasse dich näher mit den Tipps und Hinweisen, die du hier im Forum erhältst. Viele Leute hier sind vielleicht kompetenter als du denkst und Wissen mehr als du glaubst. Viele Forenbeiträge machen Sinn, auch wenn du ihn möglicherweise nicht sofort erkennst. Viele Beiträge enthalten Tipps, Ratschläge und Programmiertechniken, die man anwenden sollte, auch wenn du aktuell nicht verstehen kannst, warum. Viele Postings weisen dich auf Fehler hin und Verbesserungsvorschläge hin, auch wenn du manchmal nicht erkennen kannst, wieso.
edit: ich sehe während ich den doch längeren Post hier verfasst habe, hat sich einiges getan. Selbstsicherheit ist gut in gewissem Maße, aber wie vieles kann man auch dies übertreiben. Schön zu sehen, dass du nun eingesehen hast, den Fehler deinerseits zu suchen. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Zuletzt bearbeitet von St_W am 15.07.2013, 01:35, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.07.2013, 01:31 Titel: |
|
|
ALWIM hat Folgendes geschrieben: |
Sicher will ich den Fehler finden! Jetzt erst recht!
-exx bzw. -g kenne ich gar nicht mal? Kann man damit Fehlersuche machen? Wie funktionieren die beiden Funktionen/Tools?
|
Dann fangen wir doch mal mit Schritt 1 an:
oeffne deinen Browser, tippe da oben in diesem kleinen weissen Textfeld "www.google.de" ein, und druecke auf enter.
Dann Tippe in das Suchfeld "freebasic exx" ein (Hinweis: nicht "-exx", denn das instruiert Google, nur Ergebnisse zu zeigen, in denen exx NICHT vorkommt.)
Dann beantwortest du die Frage "meinten Sie: freebasic exe" mit "nein, nach freebasic exx suchen"
Und du wirst sehen, was -exx tut.
Auf dieser Seite findest du evtl auch Informationen zum -g Flag. Ueberlege auch mal, ob dir "-g" ueberhaupt was bringen kann, wenn du kein valgrind nutzt.
Dann google nach Valgrind. Tipp: C und FreeBasic sind sich garnicht mal so unaehnlich, wenn du nur Tipps zu C findest, kannst du sie vermutlich 1:1 auf FreeBasic anwenden. _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 01:49 Titel: |
|
|
Programm wird beendet bzw. hält an! Schon mal ein Zeichen dass da etwas nicht in Ordnung ist! Bloß ist das blöd, dass da nichts angezeigt wird! Eine Fehlerausgabe wäre schon nicht schlecht! Vor allem in welcher Zeile das ganze auftritt!
Nun ja, Suche geht weiter!
Dann müsste ich bei meinen anderen Programmen mit -exx auch was finden! Habe noch nie mit -exx kompiliert! Man lernt nie aus! Da natürlich bisher immer alles funktionierte, habe ich mich nie sonderlich damit befasst!
Valgrind funktioniert bei mir nicht wahrscheinlich nicht! Ist nur für Linux-Rechner wenn ich das richtig gelesen habe!
Danke für eure Tipps! Sind sicher wertvoll!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 15.07.2013, 07:46 Titel: |
|
|
Zitat: | Programm wird beendet bzw. hält an! Schon mal ein Zeichen dass da etwas nicht in Ordnung ist! Bloß ist das blöd, dass da nichts angezeigt wird! |
Wird sie, allerdings nicht im FreeBASIC-Programm - das wurde ja beendet.
Starte das mit -exx compilierte Programm in der Konsole. Ob es dafür in deiner IDE eine eingebaute Möglichkeit dafür gibt, weiß ich nicht; ansonsten einfach über das Windows-Kommandozeilentool.
-exx würde ich im Umgang mit Speicherreservierung und Arrays in der Entwicklungsphase eines Programms immer empfehlen. Ich compiliere während der Entwicklung ausschließlich mit -exx; ich habe inzwischen sehr viel Erfahrung mit Array-Grenzen und mache in diesem Bezug kaum noch Fehler, aber die Betonung liegt auf "kaum" - das sind mir noch zu viele. Wenn das fertige Programm dann veröffentlicht wird, ist es besser, die veröffentlichte exe-Datei ohne -exx zu compilieren. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 15:33 Titel: |
|
|
nemored hat Folgendes geschrieben: | Zitat: | Programm wird beendet bzw. hält an! Schon mal ein Zeichen dass da etwas nicht in Ordnung ist! Bloß ist das blöd, dass da nichts angezeigt wird! |
Wird sie, allerdings nicht im FreeBASIC-Programm - das wurde ja beendet.
Starte das mit -exx compilierte Programm in der Konsole. Ob es dafür in deiner IDE eine eingebaute Möglichkeit dafür gibt, weiß ich nicht; ansonsten einfach über das Windows-Kommandozeilentool.
-exx würde ich im Umgang mit Speicherreservierung und Arrays in der Entwicklungsphase eines Programms immer empfehlen. Ich compiliere während der Entwicklung ausschließlich mit -exx; ich habe inzwischen sehr viel Erfahrung mit Array-Grenzen und mache in diesem Bezug kaum noch Fehler, aber die Betonung liegt auf "kaum" - das sind mir noch zu viele. Wenn das fertige Programm dann veröffentlicht wird, ist es besser, die veröffentlichte exe-Datei ohne -exx zu compilieren. |
Es ist schon erstaunlich, dass man auf so etwas auch aufpassen muss! Das wusste ich bisher nicht! Normalerweise dürfte es so gut wie keine Speicherzugriffverletzungen bei mir geben! Aber hin und wieder sind dann doch welche vorhanden.
Irgendwie klappt das mit -exx nicht so recht! Das Consolenfenster wird ebenfalls sofort wieder geschlossen und die angezeigte Zeile enthält nicht mal 1 einzigen Buchstaben! _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 15.07.2013, 15:52 Titel: |
|
|
Zitat: | Starte das mit -exx compilierte Programm in der Konsole. |
Damit ist gemeint: Starte die Konsole (cmd war das bisher; keine Ahnung wie die neueren Windowse das handhaben) und DANN rufe von der Konsole aus das Programm auf. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 16:52 Titel: |
|
|
nemored hat Folgendes geschrieben: | Zitat: | Starte das mit -exx compilierte Programm in der Konsole. |
Damit ist gemeint: Starte die Konsole (cmd war das bisher; keine Ahnung wie die neueren Windowse das handhaben) und DANN rufe von der Konsole aus das Programm auf. |
Das habe ich vorher bereits getan. Nur zeigte es mir nichts an. Habe es aber nun hinbekommen und konnte es jetzt testen! Offensichtlich war da bloß diese eine Zugriffsverletzung drin? Fehlerhaftezeile war die 399! Konnte keine weiteren Fehler (bis jetzt) mehr aufdecken!
Das Programm läuft durch bis zum Ende? Kein schließen mehr? Erstaunlich!
Ich danke euch recht herzlich! Allerdings behebt das ganze nicht das erste Problem! Schon merkwürdig! Entweder habe ich beim suchen der Fehler irrtümlich im Quellcode was verändert, oder es ist tatsächlich das was ich noch vermute! Das liegt dann aber weder an mir noch an der IDE oder dem Compiler!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 15.07.2013, 18:09 Titel: |
|
|
nemored hat Folgendes geschrieben: | Zitat: | Starte das mit -exx compilierte Programm in der Konsole. |
Damit ist gemeint: Starte die Konsole (cmd war das bisher; keine Ahnung wie die neueren Windowse das handhaben) und DANN rufe von der Konsole aus das Programm auf. |
Das habe ich vorher bereits getan. Nur zeigte es mir nichts an. Habe es aber nun hinbekommen und konnte es jetzt testen! Offensichtlich war da bloß diese eine Zugriffsverletzung drin? Fehlerhaftezeile war die 399! Konnte keine weiteren Fehler (bis jetzt) mehr aufdecken!
Das Programm läuft durch bis zum Ende? Kein schließen mehr? Erstaunlich!
Ich danke euch recht herzlich! Allerdings behebt das ganze nicht das erste Problem! Schon merkwürdig! Entweder habe ich beim suchen der Fehler irrtümlich im Quellcode was verändert, oder es ist tatsächlich das was ich noch vermute! Das liegt dann aber weder an mir noch an der IDE oder dem Compiler!
Edit:
Zitat: | Mit Tests kann man keine Richtigkeit von Programmen beweisen. |
Den Test den ich gemacht habe, sagte mir zu 100% ob das programmierte richtig funktionierte!
Der PC nimmt Karten die schon aus dem Spiel sind. Nach meinem Test kann der keine Karten nehmen die schon aus dem Spiel sind!
Code: |
DO
DO
KC1 = INT(RND * 64) + 1
LOOP WHILE gezKarte(KC1) = - 1
DO
KC2 = INT(RND * 64) + 1
LOOP WHILE gezKarte(KC2) = - 1
LOOP WHILE KC1 = KC2
|
-1 bedeutet, dass die Karte schon aus dem Spiel ist!
0 bedeutet, dass die Karte noch im Spiel ist!
Demnach kann der PC keine aus dem Spiel genommene Karte nehmen! Und es wird auch alles korrekt gespeichert bei gezKarte im Quellcode 1.9!
Selbst getestet!!!
Gruß
ALWIM
Wieso hat editieren nicht funktioniert? _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 15.07.2013, 19:01 Titel: |
|
|
Auch wenn es eigentlich eine Wiederholung des bisher gesagten ist - wenn du Speicherzugriffsverletzungen im Programm hast (in deinem Fall Zugriff auf Array-Elemente mit größerem Index als erlaubt; möglich wäre auch das Laden eines zu großen Bildes in einen zu kleinen Speicher), dann tritt der Fehler an ganz anderer Stelle auf als man vermuten würde. Da kann das Speichern der gezogenen Karten korrekt sein und die Abfrage der bereits gezogenen Karten auch - der fehlerhafte Speicherzugriff macht alles wieder kaputt.
Falschen Array-Zugriff habe ich in deinem Programm zumindest zweimal gefunden; ich habe auch beide Stellen bereits gepostet. Ob sonst noch was drin ist, habe ich nicht weiter geprüft.
Da ich gleich wieder weg muss, nur ein kleines Beispiel zur Veranschaulichung des Zugriffproblems: Angenommen, die Daten liegen so im Speicher (reines erfundenes Beispiel):
Array(0), Array(1), Array(2), Array(3), XWert, YWert, ZWert
alles als INTEGER-Werte im Speicher direkt hintereinander (der Einfachheit).
Schreibst du jetzt etwas in Array(4) - genau, richtig; Array(4) gibt es ja gar nicht - dann wird trotzdem die entsprechende Speicherstelle berechnet und überschrieben. In diesem Fall hast du also die Variable XWert überschrieben, obwohl du überhaupt nichts von XWert verwendet hast. Im schlimmsten Fall schreibst du sogar in Speicherbereiche, die deinem Programm gar nicht gehören, was das Betriebssystem hoffentlich mit einem Programmabsturz quittiert, um größeren Schaden (nämlich Veränderung irgendwelcher Daten komplett anderer Programme) zu verhindern. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 16.07.2013, 14:40 Titel: |
|
|
Compiliere ich mit -exx läuft das Programm komplett durch! Es wird nicht geschlossen, nicht beendet! Es zeigt keinen einzigen Fehler an! Auch ich finde im Quellcode nichts falsches! Nichts was auf eine Verletzung auf irgendwas hindeuten würde! Habe mir den Quellcode jetzt sechsmal schon angesehen! Trotzdem nimmt der Computer eine Karte die schon aus dem Spiel ist! Ich versteh das nicht??? Ich werde das Gefühl nicht los, dass da doch die IDE oder der Compiler dran schuld ist! Version 1.9 funktioniert ja?? Da nimmt der PC bei mir nicht eine falsche Karte! Da würden noch 1000 Test nichts bringen. Wenn wirklich ein gravierender Programmierfehler drin wäre, müsste der auch schon bei Version 1.9 zu Fehlern führen! Das ist aber nicht der Fall!
Wieso nimmt der eine Karte die schon aus dem Spiel ist?
Entweder ich zerlege den Quellcode oder ich probiere mal eine andere IDE aus!
An irgendwas muss es ja liegen?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.07.2013, 14:55 Titel: |
|
|
Du hast die Posts über deinem immer noch nicht verstanden. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 16.07.2013, 16:05 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Du hast die Posts über deinem immer noch nicht verstanden. |
Möglicherweise? Ich habe jetzt schon zig mal den Quellcode nach solchen möglichen Fehlerquellen durchforstet! Die genannten Fehler/Ursachen habe ich beseitigt. Auch andere mögliche Fehlerquellen (keine Speicherzugriffsverletzungen) habe ich mit einbezogen! Ich weiß nicht wo der Hund begraben liegt bzw. warum der Karten nimmt, die eigentlich schon aus dem Spiel sind!
Denkbar wäre auch, dass tatsächlich ein Programmierfehler vorhanden ist, den ich bisher noch nicht finden konnte und durch die Zugriffsverletzungen bei der Version 1.9 zu keinen Fehlern führt! Bei der Erweiterung aber offensichtlich immer zu dem genannten Phänomen führt! Allerdings konnte ich bereits durch umfangreiche Tests, beweisen dass die Theorie ohne Probleme funktioniert?
Wie gesagt -exx findet nichts mehr!
Wenn der Quellcode wirklich fehlerhaft gespeichert wurde, bleibt der durch kopieren und einfügen weiterhin fehlerhaft! Dies konnte ich bereits bei einem anderen Projekt feststellen bzw. mit eigenen Augen sehen!
Das ist echt zum verzweifeln! Was löst das ganze aus? Warum nimmt der Karten die schon aus dem Spiel sind? Bei Version 1.9 nicht ein einziges Mal ein falscher Zug! Entweder er speichert tatsächlich in der Variable an der falschen Stelle, aber dann müsste Version 1.9 auch schon nicht funktionieren oder der Wert wird warum auch immer nachträglich überschrieben.
Quellcode der die Bilder lädt, kein Fehler! Musikladen kein offensichtlicher Fehler? Oder doch? Ich sehe jetzt da auf die schnelle keinen Fehler mehr.
Wenn ich den Fehler nicht finde, werde ich das Projekt für immer und ewig zur Seite legen! Genauso wie die zwei anderen Projekte, die seit Jahren auf Eis liegen. Nicht weil ich es nicht schaffe, sondern weil mir einfach die Lust dazu fehlt!
Das beste wird wahrscheinlich sein, wenn ich das Ding nochmal neu schreibe! So komm ich nicht weiter!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 16.07.2013, 17:11 Titel: |
|
|
Zitat: | Quellcode der die Bilder lädt, kein Fehler! |
Ich bin mir da mit den Speichergrößen nicht so ganz sicher. Ein 32bit-Imagepuffer der Größe 100x100 Pixel ist laut IMAGEINFO 40'004 Byte groß. Deine Bilddateien sind laut meiner Anzeige aber 40'009 Byte groß (ich frage mich übrigens nach wie vor, warum du dem alten QBASIC-Format anhängst anstatt einfach Bitmaps einzubinden). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 957 Wohnort: Austria
|
Verfasst am: 16.07.2013, 17:17 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Wenn ich den Fehler nicht finde, werde ich das Projekt für immer und ewig zur Seite legen! Genauso wie die zwei anderen Projekte, die seit Jahren auf Eis liegen. Nicht weil ich es nicht schaffe, sondern weil mir einfach die Lust dazu fehlt!
Das beste wird wahrscheinlich sein, wenn ich das Ding nochmal neu schreibe! So komm ich nicht weiter! |
So wirst du es aber nicht weit bringen. Fehlersuche und Fehlerbehebung (Debugging) ist schließlich eine Sache, die zum Programmieren einfach dazugehört. Es gibt dutzende Werkzeuge, die einem die Arbeit etwas erleichtern (ok, für FreeBasic vielleicht nicht so viele, aber fbDebugger ist schon mal ganz gut), aber etwas Erfahrung gehört da schon dazu. Und diese Erfahrung erlangt man nun mal nicht so schnell von heute auf morgen. Da steckt viel Arbeit dahinter. Viele Fehler, die man aufgespürt und behoben hat.
Und glaub nicht, dass es helfen wird, wenn du nochmal von vorne anfängst! Niemand ist perfekt, auch nicht du. In jedem Programm können und werden Fehler passieren und vorkommen, wobei manche einfacher und manche schwieriger zu beheben sein werden. Aber ein Programm zu schreiben ohne einen einzigen Fehler dabei zu machen gelingt nur selten und entsprechend weniger oft, wenn die Programmgröße steigt. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|