C++ malloc invalid conversion from void* to int* 無效的轉換

這篇 ShengYu 介紹一下在 C++ 程式中使用 malloc 新手常遇到的 invalid conversion 編譯器報錯的問題,
在 C 語言你可以這樣寫,malloc 會回傳 void * 並自動地轉換成 int *

cpp-malloc-invalid-conversion.cpp
1
int *arr = malloc(10 * sizeof(int));

但在 C++ 中,這段程式編譯器會報錯,編譯時期的錯誤如下,

1
2
3
4
cpp-malloc-invalid-conversion.cpp: In function ‘int main()’:
cpp-malloc-invalid-conversion.cpp:5:22: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
int *arr = malloc(10 * sizeof(int));
^

因為在 C++ 中不允許隱式轉換(implicit conversion),C++ 比 C 更重視型別安全,也就是說在 C++ 不會自動地將 void * 轉換為 int * 指標(或其它類型的指標),你需要用顯式轉換(explicit conversion)明確地告訴編譯器轉換類型,例如

1
int *arr = (int *)malloc(10 * sizeof(int));

這樣就可以編譯過了~~~

其它相關文章推薦
C/C++ 新手入門教學懶人包
C/C++ 字串轉數字的4種方法
C++ virtual 的兩種用法
C/C++ 字串反轉 reverse
C/C++ call by value傳值, call by pointer傳址, call by reference傳參考 的差別
C++ 類別樣板 class template
std::sort 用法與範例
std::find 用法與範例
std::queue 用法與範例
std::map 用法與範例
std::deque 用法與範例
std::vector 用法與範例