Warum funzt das net?



  • Moin Leute!

    Ich hab ein kleines Prob mit einem Proggy unter Win 2000 und Win98.
    Ich weiß, dass bei W2k die Dosbox nur emuliert ist, aber er macht blödsinn an einer Stelle, wo es gar nicht sein kann. Bei Win 98 meldet er nichts und bei W2k sagt er die CPU hat nen ungültigen Befehl entdeckt.
    Ich hab den Fehler auf eine Stelle eingrenzen können. Aber diese scheint mir echt was eigenartiges zu haben. Der Fehler und somit der Programmabbruch ereignet sich bei der Rückkehr aus einer Unterfunktion. Ich hab keine Ahnung, was das soll. Kann es sein es liegt noch was auf dem Stack und wird bei der Rückkehr aufgelöst und darf aber nicht aufgelöst werden?
    Ich hab printf- Debugging vor der } ind der Unterfunktion gemacht und nach der Runktionsrückkehr in der Rufenden Funktion. Also dürfte nicht weiter geschehen, als Stackbereinigung.
    Als ich es auf nem 98 System versucht hab, dat es gefunzt, bzw. hat keinen Fehler gemeldet, nichtmal ne Zugriffsrechtsverletzung.

    Für Hilfe schonmal Dank

    NiP



  • Also ohne Code kann man eigentlich nicht helfen.
    Denn ich glaube nicht das hier jemand den code richen kann, oder? 😃
    Kannst du die Fehlerstelle eingrenzen?
    Wenn ja, dann markiere sie im code.



  • Gut, ein Codebeispiel:

    void test1(){ //nehmen wir an, das ist die Unterfunktion, also die gerufene Funktion.
       machwas();
       machnochwas();
       printf("Testausgabe 1");
       while(!kbhit()){};
    }
    
    void obertest(){ //rufende Funktion
    
       test1();
       printf("Testausgabe 2");
       while(!kbhit()){};
    }
    

    So, nun ist folgendes passiert:

    Wenn das Proggy läuft, dann bleibt es nach der Ausgabe von "Testausgabe 1" stehen und wartet auf einen Tastendruck, dazu die whileschleife (in wirklichkeit mach ich das mit getch(), will aber keine Prügel einstecken 😃 ). Dann müsste er ja aus der unterfunktion zurückkehren und mir den "Testausgabe 2" um die Ohren hauen. Nix da, nachdem ich die erste Taste gequetscht hab, bekommich ne Fehlermeldung vom System: Die NTVCPU hat einen ungültigen Befehl entdeckt <Adressenausgaben>.
    Wie gesagt, das ganze bekomm ich nur in der W2k Dosbox. Unter Win98 nicht, da läuft es einwandfrei durch.
    Es könnt ja daran liegen, dass die Dosbox ja nur noch Dosbox heißt. mein Proggy ist aber ein echtes Dos Proggy. Deswegen evtl. auch die einwandfreie Ausführung unter Win98.

    NiP

    [ Dieser Beitrag wurde am 11.03.2003 um 21:46 Uhr von Nobody_Is_Perfect editiert. ]



  • ich versuch das morgen mal unter xp 😉

    hier eine recherche des fehlers:

    *Fehlermeldung bei 16 Bit Programmen
    Erscheint beim Start einer 16-Bit Anwendung eine Fehlermeldung, 16 Bit Windows Subsystem - Versteckte Konsole von WOWVDM. Die NTVDM-CPU hat einen ungültigen Befehl entdeckt...
    kann ein ungültiger Eintrag in der Config.nt oder Autoexec.nt Schuld sein. Verdächtige Einträge sollten probehalber auskommentiert werden. Eine weitere Fehlerquelle kann Command.com sein. Das Änderungsdatum sollte mit den Daten der Windows Originalinstallation übereinstimmen. Benenne probehalber alle Command.com Versionen um, die ein anderes Datum haben, ausgenommen die Version in C: .Im Ordner System32 darf nur eine Version von Command.com vorhanden sein.
    *
    http://www.pqtuning.de/win2000/fehler2.htm

    scheint ein üblicher fehler zu sein... google mal nach " NTVDM-CPU hat einen ungültigen Befehl entdeckt"



  • Danke, dann bin ich ja doch net blöd. 🙄



  • Theoretisch denkbar wär auch ein Buffer-Overflow, der den Rücksprungzeiger auf dem Stack zerstört und dich dann beim Rücksprung ins Nirvana schickt. Allerdings hätte das normalerweise unter beiden OS' fatale Auswirkungen. Aber bei elise's Fundstelle steht auch dazu "beim Programmstart", so dass das auch nicht unbedingt die Fehlerursache sein muß.

    BTW: Für kbhit steckst du genauso viel/wenig Prügel ein wie für getch 😉 nämlich keine



  • Wenn du auf Enter warten willst kannst du getchar() nehmen, denn getch() wartet nur auf ein Zeichen und nicht auf enter. 😃



  • Der Tipp is echt gut. Ich kenn den Unterschied zwischen getchar und getch() 😃 . Ich will nur nicht unbedingt mit Enter weitermachen, ich will mittels: "Please press any Key to Continue!" weitermachen. 🙂

    NiP



  • wollte doch den xp testen.. da gehts problemlos..

    habe nur viele windows 2000 probs in der hinsicht gefunden bei der google recherche

    @bashar war nur eins von vielen bei obiger eingabe..



  • Danke, ich werd das mal bei gelegenheit austesten mit dem XP. Kann ja sein, die haben einige Fehler in der DosBox beseitigt und dabei wieder andere reingemacht.:D

    Erstma Dank. NiP



  • Dank an alle die gepostet haben und helfen wollten, aber es lag keinesfalls am System. Es war eine C-typische Zeigergeschichte. Ich hab mir einen Zeiger überschrieben. Das wirklich kuriose war, dass der Abflug immer beim Rücksprung aus ner Unterfunktion eingetreten is.

    Danke NiP


Anmelden zum Antworten