Fork me on GitHub

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

 

posted @ 2015-07-07 13:19  europelee  阅读(681)  评论(1编辑  收藏  举报