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才是良好的习惯。。。

 

转载于:https://www.cnblogs.com/europelee/p/4626700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值