kostenloser Webspace werbefrei: lima-city


C++ Zugriffsverletzung

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    f************r

    Hallo,

    ich habe mir eine Funktion gebaut, welche einen Wert in der Registery ändert. Das Kompelieren geht ohne Fehler, aber danach kommt:


    Unbehandelte Ausnahme bei 0x77da78c9 in Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000003c




    Hier der Code:


    #include <windows.h> 
    void Reg (HKEY Zweig, char Pfad, char Name, char Wert1) 
    { 
        HKEY hkey; 
        char *Wert;  
        Wert = reinterpret_cast<char*>(Wert1); 
        RegOpenKeyEx(Zweig,(LPCTSTR)Pfad, 0, KEY_ALL_ACCESS, &hkey);        // Öffnen 
        RegSetValueEx(hkey, (LPCTSTR)Name, 0, REG_SZ, (BYTE *)Wert, strlen(Wert));        // Wert setzen 
        RegCloseKey(hkey);                                                // Schließen 
    } 
    
    int main(int argc, char **argv)  
    {  
      Reg (HKEY_LOCAL_MACHINE, (char)"SYSTEM\\CurrentControlSet\\Services\\Schedule", (char)"Start", (char)"00000004"); 
      return 0; 
    }


    MfG

    Steffen
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du castest einen String auf einen einfachen Character. Dadurch wird der Pointer auf den String in einer char-Variable gespeichert, welche jedoch viel zu klein ist, um einen Pointer aufzunehmen, so dass von den vier Bytes eines Pointers drei verloren gehen. Unterlass mal das blödsinnige Casten und übergib die Werte direkt als char*, dann sollte das auch funktionieren
  4. Autor dieses Themas

    f************r

    Danke goeranbarz!

    Für alle die etwas mit dem Code anfangen können, hier ist die berichtigte Version:

    #include <windows.h>
    void Reg (HKEY Zweig, char* Pfad, char* Name, char* Wert)
    {
    	HKEY hkey;
    	RegOpenKeyEx(Zweig,(LPCTSTR)Pfad, 0, KEY_ALL_ACCESS, &hkey);					// Öffnen
    	RegSetValueEx(hkey, (LPCTSTR)Name, 0, REG_SZ, (BYTE *)Wert, strlen(Wert));		// Wert setzen
    	RegCloseKey(hkey);																// Schließen
    }
    
    int main(int argc, char **argv) 
    { 
      Reg (HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Schedule", "Start", "00000004");
      return 0;
    }


    MfG

    Steffen

    Beitrag zuletzt geändert: 27.4.2009 15:44:43 von fusballmanager
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!