You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:18:20