2012-12-12 358 views
-1

我有這個問題與C.malloc分配到指針

我有以下聲明。

int *a; 
a=malloc(100); 

而且我得到以下錯誤:

error: invalid conversion from 'void*' to 'int*' [-fpermissive]

對此有何提示?

+7

這是一個合法的轉換C.你確定你沒有編譯C++編譯器嗎? –

+1

我相當有信心,這是C++ - -permissive尤其是C++的gcc選項,而不是C. –

+0

不清楚這個問題究竟是什麼(想關閉編譯器或修復編程錯誤)?無論如何,這太基本了,無法回答。 –

回答

11

您正在將代碼編譯爲C++,其中您使用的代碼無效。對於C來說,它是有效的,而且你是should not add any cast

但是,請注意,malloc()的參數在char s,所以「100」是有點隨機的。如果你想100點的整數,這樣做:

a = malloc(100 * sizeof *a); 
+0

你說得對,我正在編譯爲C++。謝謝 ! – abyssal

-4

malloc正在返回一個void *指針。

你應該這樣做:

a=(int*)malloc(100); 

BTW:這個語句被分配100字節,而不是100個整數。 LE:如果你用gcc編譯,這不是必須的。如果你用g ++編譯,這是必須的。

+5

你不需要這個在C – Roddy

+0

a =(int *)malloc(5 * sizeof(int)); – abyssal

+1

請參閱http://stackoverflow.com/a/605858/50902 – kmkaplan

0

當在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而不被銷燬),也可能會被推薦。