`malloc(-1)` 失敗,`malloc(0xffffffff)` 成功 (返回非 NULL),雖然兩者位模式相同 (0xFFFFFFFF)。
`malloc` 參數類型為 `size_t` (**無符號**)。
- `-1` 為 **有符號 int**,傳遞時發生**有符號→無符號轉換**,但某些舊編譯器/庫在轉換前檢查「若有符號值 < 0 則直接返回 NULL」。
- `0xffffffff` 為 **無符號常數** (或 `unsigned int`),直接匹配 `size_t`,視為合法巨大請求 (4GB-1),若地址空間允許可能成功 (64 位系統)。
printf("%zu\n", (size_t)-1); // 18446744073709551615 (64位)
printf("%zu\n", (size_t)0xffffffffu); // 4294967295
// 兩者值不同!關鍵在常數類型。
永遠對 `malloc` 傳遞 **無符號類型** 或 `size_t` 變量,避免負數字面量:
`malloc((size_t)n)` 或 `malloc((unsigned)n)`。