我認爲這段代碼應該會產生一個緩衝區溢出錯誤,但顯然,這打印罰款..是否有檢測到它已經飛越?如何檢測緩衝區溢出C在這種情況下,
Valgrind的沒有把它撿起來要麼...
static void e(void) {
char buffer[5];
char data1[] = "abc";
char data2[] = "de";
memcpy(buffer, data1, sizeof(data1));
// strcat appends data2 to buffer and adds '\0' at the end dest
strcat(buffer, data2);
//printf("%s\n", buffer);
}
這絕對是未定義的行爲。然而,未定義的行爲意味着任何事情都可能發生,甚至沒有可見的事情。 – user3629249