我有這個問題與C.malloc分配到指針
我有以下聲明。
int *a;
a=malloc(100);
而且我得到以下錯誤:
error: invalid conversion from 'void*' to 'int*' [-fpermissive]
對此有何提示?
我有這個問題與C.malloc分配到指針
我有以下聲明。
int *a;
a=malloc(100);
而且我得到以下錯誤:
error: invalid conversion from 'void*' to 'int*' [-fpermissive]
對此有何提示?
您正在將代碼編譯爲C++,其中您使用的代碼無效。對於C來說,它是有效的,而且你是should not add any cast。
但是,請注意,malloc()
的參數在char
s,所以「100」是有點隨機的。如果你想100點的整數,這樣做:
a = malloc(100 * sizeof *a);
你說得對,我正在編譯爲C++。謝謝 ! – abyssal
當在C++中,你必須使用malloc
因爲一些純C庫是要free
它寫C兼容的代碼,我會建議寫了一個快速的類型化的malloc :
template<typename T>
T* typed_malloc(size_t count = 1) {
return reinterpret_cast<T*>(malloc(sizeof(T)*count));
}
,你再使用這樣的:
int *a;
a=typed_malloc<int>(100);
創建緩衝區大小爲100 int
秒。
添加一些額外的東西,如防止以這種方式用非平凡的析構函數創建類(因爲您期望它們是free
而不被銷燬),也可能會被推薦。
這是一個合法的轉換C.你確定你沒有編譯C++編譯器嗎? –
我相當有信心,這是C++ - -permissive尤其是C++的gcc選項,而不是C. –
不清楚這個問題究竟是什麼(想關閉編譯器或修復編程錯誤)?無論如何,這太基本了,無法回答。 –