Frage zu Fehler



  • Stack around Variable zahl corrupted. Warum das ? Ich versuche gerade ein array nachzubauen.

    int main()
    {
    	int zahl = 5;
    	int* ptr = &zahl;
    	*(ptr + 1) = 6;
    	*(ptr + 2) = 7;
    	*(ptr + 3) = 8;
    	*(ptr + 4) = 9;
    
    	printf("%p\n", ptr);
    	printf("%p", ptr + 1);
    
        return 0;
    }
    


  • int *ptr = (int *)malloc(sizeof(int) * 5);
    

    wenn man malloc macht dann gehts sogar. Hm. Der Compiler meckert wohl deswegen rum...



  • Du greifst auf Speicher zu, der dir nicht zugewiesen wurde, .der nicht unter deiner Kontrolle steht.

    Mit int zahl = 5; belegst du Platz für ein int.
    Mit *(ptr + 1) = 6; greifst du aber auf Speicher zu, der dahinter liegt.

    Da liegen z.B. programminterne Informationen (Rücksprungadressen o.Ä.)
    Die hast du überschrieben.



  • Den Cast bei malloc kannst Du auch gleich mal streichen.



  • SG1 schrieb:

    Den Cast bei malloc kannst Du auch gleich mal streichen.

    Also mein Visual Studio gibt mir nen Fehler ohne cast !!!



  • hast du die dateiendung auf .c gesetzt?



  • computernerds schrieb:

    SG1 schrieb:

    Den Cast bei malloc kannst Du auch gleich mal streichen.

    Also mein Visual Studio gibt mir nen Fehler ohne cast !!!

    Da du C programmierst, solltest du deinen Compiler auch auf C einstellen.

    Der Cast ist nur bei C++ nötig.

    Visual Studio wird dir auch Meldungen bei printf und scanf geben.
    Wenn du die Funktionen 1:1 gegen den Vorschlag ersetzt, fällst du ziemlich auf die Schn...



  • DirkB schrieb:

    Der Cast ist nur bei C++ nötig.

    Ja stimmt. Der Rueckgabewert von malloc is void* und der C++ compiler will hier einen cast haben.



  • bei c++ ist malloc aber nur eine "altlast" und wenn du die dateiendung auf .c änderst, funktionierts mit dem visual c++ compiler auch ohne cast.


Log in to reply