Warum funktioniert das?Odd Verhalten in Bezug auf malloc()
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * abc = malloc(1) + 4; //WRONG use of malloc.
char * xyz = "abc";
strcpy(abc, xyz); //Should fail.
printf("%s\n", abc); //Prints abc
}
Ich würde die strcpy erwarten für nicht mit genügend Speicher zum Scheitern verurteilt, da ich (in 1 auf das Argument von malloc vorbei). Stattdessen kompiliert und läuft es einwandfrei (sowohl in GCC unter Linux als auch unter Windows unter deC++).
Ist dieses erwartete Verhalten oder ein glücklicher Zufall?
Ich nehme an, das ist keine gute Praxis, aber warum funktioniert es?
Ohne die +4
am Ende der malloc()
, bekomme ich einen Segmentierungsfehler. Das ist hauptsächlich was ich interessiere.
Das ist nicht was "Arbeit" bedeutet. –
Können Sie es ausarbeiten? – ale10ander
Aufrufen von undefiniertem Verhalten ist immer eine schlechte Idee. Und es macht keinen Sinn zu erforschen, warum sich Code nach dem Aufruf so verhält. Nicht sicher, warum Sie vermuten, nicht genug Speicher zu haben, um 1 Byte zuzuordnen, aber Sie könnten ein Missverständnis über 'malloc' & Freunde haben. Und Arithmetik für 'void *' ist ebenfalls nicht definiert. – Olaf