2015-06-26 72 views
0

我想在Microsoft Visual Studio 2013上編譯一個爲C++編寫的程序。malloc C++ VS 2013

聲明

sdesc_t *ret = _malloc(sizeof(sdesc_t)); 

回報: 智能感知:類型的值 「無效*」 不能用於初始化類型 「sdesc_t *」

任何建議的實體?

+2

你確定這是一個C++程序嗎? –

+0

爲了澄清上述情況,C會允許這樣做,C++不會。 –

+0

我是C和C++的混合體,當我讀到最好的是轉換C++中的C部分。你是這麼認爲的嗎? – gmonti

回答

6

使用此:

sdesc_t *ret = (sdesc_t *)_malloc(sizeof(sdesc_t)); 

或者更好地利用reinterpret_cast

sdesc_t *ret = reinterpret_cast<sdesc_t *>(_malloc(sizeof(sdesc_t))); 

而且,由於使用的是C++,你最好使用new

sdesc_t *ret = new sdesc_t; 

而且,由於使用的是支持auto的最新C++編譯器,您可以:

auto ret = new sdesc_t; 

而且由於STL具有智能指針豐富的支持,你可以簡單地使用它們。例如:

auto ret = std::make_unique<sdesc_t>(); 
+0

可能還會提到unique_ptr,而您在此:) –

+0

我在編輯此評論時一直在進行編輯! – Ajay

0

使用型鑄造之前設定指針的值一樣

sdesc_t *ret = (sdesc_t *)_malloc(sizeof(sdesc_t)); 

正如你寫的是默認爲空,因此它使錯誤。