Segmention Fault / SIGSEGV - durch LoadIcon()?



  • Hallo zusammen,

    ich habe bei einem Programm von mir während des Debuggens immer einen
    Segmention Fault, welchen ich nicht wegbekomme.

    Ich habe jetzt mal alles auf die paar Zeilen Code runtergebrochen.
    Bei mir ist der Fehler immer reproduzierbar. Scheinbar liegt der Fehler
    in der Zeile:

    wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON));

    Ich weiss aber nicht warum.. stehe vielleicht auch grad ein bissl im Wald.

    IDE ist übrigens Code::Blocks 13.12
    Compiler: GNU GCC Compiler
    Debugger: GNU gdb (GDB) 7.5

    Falls jemand nen Tipp hat wäre das echt super.

    P.s.

    Das Ganze tritt offenbar auch nur in Kombination mit der for-Schleife auf.
    Daher ist diese im Code mit enthalten.
    (Auch wenn die so keinen Sinn mehr macht.)

    main.cpp

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    #define    IDI_ICON        101
    
    int main(int argc, char* argv[])
    {
        // Icon einbinden
        WNDCLASS wndclass;
        HINSTANCE hInstance;
        wndclass.hIcon	= LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON));
    
        if (argc == 2)
        {
            if(!strcmp(argv[1], "-createlist"))
            {
                for(int createindex = 1; createindex <= 3000;createindex++);
            }
        }
        cin.get();
        return 0;
    }
    

    main.rc

    #include <windows.h>
    IDI_ICON	ICON	DISCARDABLE	"Icon.ico"
    

    Edit:

    Auswurf des Debuggers ist übrigens:

    Program received signal SIGSEGV, Segmentation fault.
    In ntdll!RtlEnumerateGenericTableWithoutSplaying () (C:\Windows\system32\ntdll.dll)
    


  • Das kleine Codeschnipsel macht keinen Sinn. Da muss Du schon etwas mehr Posten damit man den Fehler Finden kann.

    Btw. Warum ist dein Einstiegspunkt main() und nicht WinMain()?



  • Das ist es ja. Den Code den ich gepostet habe reicht schon völlig aus um einen
    SEGFAULT auszulösen.

    Das Programm selbst ist für die console geschrieben.
    Daher kein WinMain.

    Für die Win32 Konsole gibt es hier ja kein Forum mehr..



  • Der erste Parameter (hInstance) ist Grütze, übergebe was vernünftiges!



  • Mach mal anstatt hInstance GetModuleHandle(NULL)



  • Es funktioniert!! Super, der Fehler hat mich Stunden gekostet.. 😑

    Jetzt wo ich drüber nachdenke..

    Kommt LoadIcon mit dem Parameter Hinstance deshalb nicht zurecht, da ich
    Hinstance nicht über main übergeben kann, da dies nur über WinMain läuft?

    Also quasi der Handle undefiniert ist?



  • Ja, genau deshalb.


Anmelden zum Antworten