C语言DIY内存分配时出现incompatible pointer types警告的解决方法
警告原因与修复方法
警告原因
你把freeUnit强制转换为char*后做指针加法,得到的结果类型是char*,但直接赋值给了memUnit*类型的newUnit。C语言中,除void*可隐式转换为其他指针类型外,不同类型指针直接赋值会被编译器判定为类型不兼容——哪怕计算出的内存地址正确,也会触发incompatible pointer types警告。
修复方法
有两种简洁的修复方式:
- 方式一:对最终结果再次强制类型转换,明确告知编译器要将
char*转为memUnit*:memUnit * newUnit = (memUnit*)((char*) freeUnit + sizeof(memUnit)); - 方式二:利用C语言指针算术特性,直接对
memUnit*指针做偏移(指针加1会自动跳过一个memUnit结构体的大小,和原计算逻辑完全一致):
这种写法无需任何强制转换,代码更简洁,还能彻底消除警告。memUnit * newUnit = freeUnit + 1;
内容的提问来源于stack exchange,提问作者Steve450
相关产品推荐
相关产品推荐

