小bug引起的C程序32位-64位移植问题

小bug引起的C程序32位-64位移植问题

2008/04/20 | 07:35 | 分类:计算机科学与编程 | 标签:bug gcc | 584次阅读

  在64位平台上测试原来在32位平台上工作正常的一个Linux C工程,访问某个函数的返回值时总是出现Segmentation fault。经查,是缺少一个extern声明引起的:

  在A.c中调用了B.c定义的函数f(),该函数返回类型是char *。在A.c中遗漏了对该函数的extern声明。由于在另一个文件中声明过,gcc在符号表中可以找到f(),就按那个声明的地址连接了,所以编译、连 接以及函数本身的运行没有出错。但由于没有声明函数原型,所以在A.c中,默认为f()返回了int型:

  在32位平台上,gcc的int和char *都是4字节,所以工作正常,函数返回值可用。
  在64位平台上,gcc默认的int是4字节,char *是8字节,函数返回值被截短,地址无效,故出现了Segmentation fault

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值