我在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);