這爲什麼會這樣工作?關於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
}
我期望strcpy失敗,因爲沒有足夠的內存,因爲我將1傳遞給malloc()的參數。相反,它編譯和運行完美無缺(在Linux上的GCC和Windows上的dev C++)。
這是預期的行爲,還是巧合?
我認爲這不是好的做法,但它爲什麼起作用?
如果在malloc()
末尾沒有+4
,我會得到分段錯誤。這大部分是我很好奇的。
這不是「工作」的意思。 –
你能否詳細說明一下? – ale10ander
調用未定義的行爲總是一個壞主意。研究爲什麼代碼一旦被調用時就沒有用處。不知道爲什麼你懷疑沒有足夠的內存來分配1個字節,但你可能對'malloc'和朋友有一些誤解。而'void *'上的算術也沒有定義。 – Olaf