C/C++日常学习总结(第十六篇)分析IA-64和IA-32位机器上同一个程序运行,前者报错,后者正常
2014-08-15 13:04
525 查看
先看这道题,是国外一个人出的,大家分析下可能是什么原因?
IA-64下面的C程序错误,在IA-32正常,在IA-64上会出现段错误,为什么?
分析:
既然出现了段错误,那么肯定是涉及到了内存分配的因素。
对于32和64两种的区别:http://www.cnblogs.com/lovevivi/p/3334369.html
重点是:int类型和指针变量已经不能匹配,所以会出错。
一篇国外文章可以借鉴下:http://stackoverflow.com/questions/5387090/segfault-on-ia-64-but-not-on-ia-32
On 32 bit implementations
Trucation of 64 bits pointer to 32 bits might be causing that problem.
Include
至于为什么加上<stdlib.h>头文件就会解决,这个我不明白,希望知道的朋友指点一二。
IA-64下面的C程序错误,在IA-32正常,在IA-64上会出现段错误,为什么?
int main() { int* p; p = (int*)malloc(sizeof(int)); *p = 10; return 0; }
分析:
既然出现了段错误,那么肯定是涉及到了内存分配的因素。
对于32和64两种的区别:http://www.cnblogs.com/lovevivi/p/3334369.html
32位编译器: char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节 64位编译器: char :1个字节 char*(即指针变量): 8个字节 short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 8个字节 long long: 8个字节 unsigned long: 8个字节
重点是:int类型和指针变量已经不能匹配,所以会出错。
一篇国外文章可以借鉴下:http://stackoverflow.com/questions/5387090/segfault-on-ia-64-but-not-on-ia-32
On 32 bit implementations
sizeof(int)and
sizeof(void*)is 32 bits each. On 64 bit implementations
sizeof(int)is still the same but
sizeof(void*)is 64 bits.
Trucation of 64 bits pointer to 32 bits might be causing that problem.
Include
<stdlib.h>to solve the problem.
至于为什么加上<stdlib.h>头文件就会解决,这个我不明白,希望知道的朋友指点一二。
相关文章推荐
- 用c/c++语言写的一个小的“爬虫”程序学习过程总结
- 用VC2013编译了一个程序,在Windows 8、Windows 7(64位、32位)下都能正常运行。但在Win XP,Win2003下运行时,却报错不能运行
- 请大家推荐好书:通过分析一个较大的程序来学习C++
- 解决升级U910_64后不能看SOPCAST等无法正常运行某些32位程序的方法
- X86_64机器编译运行32位程序
- C/C++日常学习总结(第二篇)结构体和类的大小及区别&为什么是new一个对象而不是malloc
- 学习笔记:一个Qt小程序,在开发板上运行成功
- 一台机器只能运行一个程序
- 用VS2005写的C++程序能在未安装VS2005的机器上直接运行吗?
- 本机运行正常的ADO程序在别的机器上无法运行的问题
- 让程序只运行一个实例的方法总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 保证程序只运行一个实例问题总结
- C++反汇编揭秘1 一个简略地C++程序反汇编解释分析
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 在未安装VS2005的机器上运行VS2005编译的C++程序
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 本机运行正常的ADO程序在别的机器上无法运行的问题