Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1899900
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 架构设计与优化

2014-11-13 16:13:10


在今天测试的过程中遇到了这样一个问题,
A.c
char *func(){
char *ptr;
ptr =malloc(14);
return ptr;
}

main.c

int main(){
A=func();
b=strlen(A);
}
结果发现在func()中,ptr = 0x7fff10121010,结果返回的时候A的值确是0xffffffff10121010。在32位的情况下,这个bug是发现不了的。
一开始感觉是gdb的bug,其实还是自己的程序有问题呀。在编译的时候,func()并没有在A.h中声明,这样main函数在编译的时候,符号表中并没有该函数的声明,结果就是默认给该函数分配一个int类型的数作为一个返回值,这样在类型转换的时候ptr(8Bytes)->int(4Bytes)->A(8Bytes)。结果部分信息就丢失了。ptr = 0x7fff10121010就转换成了0xffffffff10121010
我想 gcc如果能够不设置int为返回值的话,这个问题就不会出现了。
很显然这种情况在32位的情况下是不会出现问题的。但是64位的情况下却会出现问题。
阅读(4092) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~