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.5Falls 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.