c语言 - 编译器警告"result of malloc is converted to a point incompatible with sizeof operand type"



我在ObjC类的接口中定义了这些:

unsigned m_howMany;
unsigned char * m_howManyEach;
...

然后在代码的后面我有这样的:

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

这就是我得到警告的地方"malloc的结果被转换为unsigned char类型的指针,这与操作数类型unsigned int的sizeof不兼容"

有人能解释一下malloc()在这种情况下的正确使用,以及如何消除警告吗?

首先,unsigned实际上是unsigned int

编译器对您很好,告诉您正在分配N个无符号项,这不是unsigned char

此外,您以后的访问也将是错误的。

更改

unsigned char * m_howManyEach;

unsigned * m_howManyEach;

因为看起来你真的想要CCD_ 5而不是CCD_。

当然,这是假设您确实想要无符号整数,而不是1字节的无符号字符。

如果积分值的实际大小很重要,则应考虑大小值(uint8_t、uint16_t、uint32_t、Guint64_t)。

这是您的问题:

sizeof(unsigned)

编译器将"unsigned"解释为"unsignedint",您应该指定"unsigneChar",如下所示:

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

奇怪的是,您根据unsigned int大小而不是unsigned char大小来调整数组的大小。

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

相关内容

  • 没有找到相关文章

最新更新