malloc 返回值為何不該強制轉型在 C++ 中,malloc 返回 void* 必須強制轉型才能賦值給具體指標類型;但在 C 語言中,這不僅多餘,還可能掩蓋錯誤。
void*,malloc 返回 char*,需強制轉型void* 作為通用指標,可隱式轉換為任何物件指標#include <stdlib.h> // 正確標頭檔,非 malloc.h
int main(void) {
double *p = malloc(sizeof *p); // 無需 (double*),推薦 sizeof *p
if (p) {
// 使用 p...
free(p);
}
return 0;
}
#include <stdlib.h>,編譯器會假設 malloc 返回 int,強制轉型會隱藏此警告,導致 64 位元系統指標截斷崩潰double* → int*),無需同步修改轉型運算子sizeof *p 更優雅「但 C++ 要求轉型,為了跨語言相容我還是轉吧?」
錯誤!C 與 C++ 是不同語言,各遵循各自標準。在 .c 檔案中遵循 C 標準,在 .cpp 中遵循 C++ 標準。混用會導致更多問題。
calloc、realloc、aligned_alloc 等所有返回 void* 的配置函式。
請包含 <stdlib.h>(C++ 為 <cstdlib>),絕勿使用 malloc.h,它從未納入任何 C/C++ 標準,移植性極差。