2012-08-28 50 views
3

在ObjC類的接口我已這些定義:編譯器警告「的malloc結果轉換成用的sizeof操作數類型不兼容的點」

unsigned m_howMany; 
unsigned char * m_howManyEach; 
... 

再後來在我有這樣的代碼:

m_howManyEach = malloc(sizeof(unsigned) * m_howMany); 

這是我得到警告「的malloc結果轉換爲unsigned char類型的指針,這與操作數的sizeof無符號整型不相容」

能如此請解釋在這種情況下malloc()的正確使用方法,以及如何去掉這個警告?

回答

3

首先,unsigned確實是unsigned int

編譯器對你很好,告訴你你正在分配N項無符號數,這不是unsigned char

此外,您以後的訪問也將是錯誤的。

變化

unsigned char * m_howManyEach; 

unsigned * m_howManyEach; 

因爲它看起來像你真的想unsigned int爲你的類型,而不是unsigtned char

當然,這假定你真的想要無符號整數,而不是1字節無符號字符。

如果您的積分值的實際大小很重要,您應該考慮大小的值(uint8_t,uint16_t,uint32_t,uint64_t)。

+0

謝謝Jody的額外解釋。它幫助我理解了基礎理論。我將使用unsigned int,因爲char或short的範圍可能無法覆蓋我之後的值範圍。 4字節應該很多。 – TrekOnTV2017

3

這裏是你的問題:

sizeof(unsigned) 

編譯器把「無符號」爲「無符號整型」,應指定「無符號的字符」這樣的:

m_howManyEach = malloc(sizeof(unsigned char) * m_howMany); 
2

這很奇怪你調整您的數組基於unsigned int大小而不是unsigned char之一。

m_howManyEach = malloc(sizeof(unsigned char) * m_howMany); 
相關問題