64bit机器 C implicit-function-declaration 函数返回指针 地址值截断问题
昨天碰到了问题,32bit机器正常,但64bit机器crash,把问题简化了下
func_a.h
声明了mystruct * func_a( );
func_a.c定义了
mystruct * func_a( )
{
//mystruct * inner进行内存申请和赋值
//print %p, inner-----address1 0x7ff87804b4a8
return inner;
}
func_b.c调用了func_a函数(但没有包含func_a的声明)
mystruct * pt_mst = func_a(); //打印pt_mst, 发现地址值非address1,0xffffffff7804b4a8,地址值被截断了
尝试改从函数参数使用二级指针返回,是正常的。
在stackoverflow上找到相同问题
By default all return values are int. So if a prototype is missing for function then compiler treats the return value as 32-bit and
generates code for 32-bit return value. Thats when your upper 4 bytes gets truncated.
在编译log里面看到了 func_a函数的implicit-function-declaration警告,像这类警告常见,但是因为func_a的用法(返回指针)
和64bit机器触发了这个地雷。
良好的编程习惯,老生重谈,warning和编译error同样都需要处理,消除warnning才是良好的习惯。。。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步