Die Anwendung konnte nicht korrekt gestartet werden (0xc0000017).



  • Ich arbeite grade an einem Map-Editor, da kam beim Debuggen plötzlich die Obenstehende Meldung. Wenn ich die .exe direkt über Windows ausführe kommt die gleiche Meldung.

    Ich verwende Visual Studio 2010 und den integrierten Compiler und Linker.

    Beim Debuggen bekomme ich folgende Ausgabe:

    "MapEditor.exe": "C:\Program Files\FFM-AG\BlockBasicGE\data\MapEditor\Debug\MapEditor.exe" geladen, Symbole wurden geladen.
    "MapEditor.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
    

    Betriebssystem:
    Win7 64bit

    Zusätzliche Header und Libs: SOIL (für Texturen), OpenGL

    Ich glaube wichtig ist auch noch zu sagen, dass seitdem ich die gesamte Ordnerstruktur von dem Programm umgekrempelt habe, das Problem auftritt, und ich daher vermute, dass das Problem durch Pfadangaben oder ähnliches zustande kommt.
    😞

    Hat jemand dieses Problem unter ähnlichen Zuständen schon einmal gehabt, oder weiß jemand, wie genau das Problem zustande kommen könnte und wie ich es lösen könnte? 😕

    Danke für Antworten!



  • Du hast was gemacht, was ntdll.dll hat abstürzen lassen. ntdll.dll ist ein Teil von Windows und damit hast du keinen Zugriff auf den Quellcode und deswegen kann dir der Debugger nicht sagen, wieso ntdll.dll abgestürzt ist. Ziemlich wahrscheinlich hast du einer Windowsfunktion einen ungültigen Pointer gegeben. Sieh dir mal den Stacktrace an. Unter ntdll.dll sollten noch ein paar Funktionen ausgegraut sein die noch zu Windows gehören und irgendwo darunter kommt dann dein Code. Die erste Zeile, die zu deinem Code gehört, hat was übergeben, was der dll nicht passt.



  • Danke, ich werd mal gucken, ich denke am besten ist es erstmal, zu gucken, was ich eingebaut hab bevor der Fehler auftrat, dann mal n bisschen was auskommentieren, oder wie du sagtest den Stacktrace angucken, mal sehn, was ich finde

    Falls ich den Fehler noch mal kriege, unter welchen Umständen kann der Fehler denn überhaupt auftreten?



  • Überall wo du Pointer übergibst. Simples Beispiel:

    char *getPath(){ //gibt böse Pointer zurück
        char s[] = "text.txt";
        return s;
    }
    
    void main(){
        fopen(getPath(), "r"); //gibt windows einen bösen Pointer
    }
    

    fopen wird in irgendwelche Windows-Interna weitergeleitet und der Pointer dereferenziert und dann gibts nen Segfault und der Debugger sagt dir die entsprechende dll ist abgestürzt. Ich weiß nicht, ob ntdll.dll für Dateien zuständig ist, aber das kriegt man raus.



  • Wie wärs mal mit Fehlercode nachschlage ? Das hat mit bösen Pointern nix zu tun.

    msdn schrieb:

    STATUS_NO_MEMORY

    Not enough virtual memory or paging file quota is available to complete the specified operation.

    link

    Irgendwo forderst du mehr Speicher an als verfügbar ist.



  • Danke, ich frag mich grad, ob das mit dem Zeichensatz zusammenhängen kann, ich hab nämlich vergessen, den wieder auf "nicht festgelegt" zu setzten und so KANN das eigentlich gar nicht funzen, ich probier das mal zuerst, dann mal gucken 😃
    Trotzdem Danke für die Antworten! Nun weiß ich jedenfalls, weshalb son Fehler überhaupt auftreten kann, also mögliche andere Gründe 😃


  • Mod

    boomigaard schrieb:

    Nun weiß ich jedenfalls, weshalb son Fehler überhaupt auftreten kann, also mögliche andere Gründe 😃

    Meistens tritt diese Art Fehler auf, wenn du auf uninitialisierte Variablen zugreifst und dadurch beispielsweise irgendeinen nicht-initialisierten Wert für eine Größe hast (die dann oft sehr, sehr groß sind). Wenn du dann entsprechend viel Speicher anforderst, kracht es.

    Danke, ich frag mich grad, ob das mit dem Zeichensatz zusammenhängen kann, ich hab nämlich vergessen, den wieder auf "nicht festgelegt" zu setzten und so KANN das eigentlich gar nicht funzen,

    Wenn dein Code anfällig gegen Änderungen der Zeichencodierung ist, dann ist das oftmals schon ein schlechtes Zeichen für die allgemeine Robustheit des Codes.



  • Ok am Zeichensatz liegt es schon mal nicht.
    Also entweder die ntdll.dll,
    irgendein bad-pointer,
    zuviel speicher angefordert, oder
    ich hab noch irgendwo was zu 32 und 64bit Problemen gehört, auch, dass irgendwelche leute den fehler hatten, die gar nicht mit visual studio programmiert haben, dafür habe ein programm installiert haben, dass mit VS programmiert wurde
    und dieses programm irgendwie nicht mehr ging 😃
    Meine anderen VS-Programme funzen noch, also kein VS - problem...

    mal gucken...



  • ok, ich hab n paa neu einprogrammierte Sachen auskommentiert, nun ist der Fehler immer noch da, aber die Ausgabe hat sich verändert:

    "MapEditor.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
    "MapEditor.exe": "C:\Windows\SysWOW64\kernel32.dll" entladen.
    Das Programm "[4244] MapEditor.exe: Systemeigen" wurde mit Code -1073741801 (0xc0000017) beendet.
    

  • Mod

    http://www.c-plusplus.net/forum/304133

    Sonst können wir nicht mehr tun, als dir die Fehlermeldung zu erklären. Was bereits geschehen ist.



  • Ok, danke!!!



  • Juhu, ich hab das Problem gelöst! Ich hab in den Projekteigenschaften bei der Speicherreservierung ne Null zu viel eingegeben, sodass er statt 1GB gleich 10GB reservieren wollte, und deshalb die Meldung kam. Guter tipp von DarkShadow44

    und nocheinmal Danke für die ganzen Antworten, ist echt ein tolles Forum!

    @SeppJ: Ich les mir das mal durch, ist erst mein 2. Beitrag hier, bin noch ziemlich neu hier, Danke für den link 🙂


Log in to reply