memcpy



  • Hi
    Warum funktioniert der gekennzeichnete Code nur in the Release Version der Anwendung, verursacht jedoch im Debug Build einen Error?
    Wie kann ich dieses Problem lösen?

    #include <windows.h>
    
    char* func(char *ch)
    {
    	char car[8]= { 0, 0, 0, 0, 0, 0, 0, 0 };
    
    	memcpy(ch, car, 8); // ERROR
    	ch[8] = 0;          // ERROR
    
    	return ch;
    }
    
    int main(int argc, char* argv[])
    {
    	func("test");
    	return 0;
    }
    


  • Weils schlichtweg falsch is was du da machst:

    func( const char *ch )
    

    Es muss (und wird) ein Zeiger auf eine Konstanze übergeben, da gibts nix zu ändern! Und beim zweiten Fehler versuchst du einfach über den vorhandenen Bereich zu schreiben.

    grüße



  • Ah ok. Wie würde dann die Lösung dieses Problems aussehen?



  • Ich seh kein Problem, daher gibts auch keine Lösung dafür. Das was du machen willst ist falsch!

    grüße



  • Das erste Problem ist, dass "test" eine Konstante ist. Dh, dieser Speicher darf nicht überschrieben werden. Lösung: erstelle eine Kopie.

    char test[...] = "test";
    func(test);
    

    Das zweite Problem ist, dass du in func() auf das neunte Element von ch zugreifst. ch hat aber nur 5 (4 + 1 abschliessendes Nullzeichen) Elemente, welche, wie bereits erwähnt, auch noch schreibgeschützt sind. Lösung: erstelle ch mit ausreichend Speicherplatz.

    char test[9] = "test";
    


  • groovemaster schrieb:

    Das erste Problem ist, dass "test" eine Konstante ist. Dh, dieser Speicher darf nicht überschrieben werden. Lösung: erstelle eine Kopie.

    char test[...] = "test";
    func(test);
    

    Das zweite Problem ist, dass du in func() auf das neunte Element von ch zugreifst. ch hat aber nur 5 (4 + 1 abschliessendes Nullzeichen) Elemente, welche, wie bereits erwähnt, auch noch schreibgeschützt sind. Lösung: erstelle ch mit ausreichend Speicherplatz.

    char test[9] = "test";
    

    Naja, doppelt gemoppelt hält besser, oder? 😉



  • Danke sehr.


Anmelden zum Antworten