【发布时间】:2011-11-24 14:42:49
【问题描述】:
我遇到了以下 C 难题:
问:为什么以下程序在 IA-64 上会出现段错误,但在 IA-32 上可以正常工作?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
我知道int 在 64 位机器上的大小可能与指针的大小不同(int 可能是 32 位,指针可能是 64 位)。但我不确定这与上述程序有何关系。
有什么想法吗?
【问题讨论】:
-
不包括
stdlib.h这样的傻事吗? -
这段代码在我的 64 位机器上运行良好。如果您
#include stdlib.h(对于 malloc),它甚至可以在没有警告的情况下编译 -
天啊! @user786653 指出了重要的一点。使用
#include <stdlib.h>,可以完美找到,但这不是问题所在。 -
@delnan - 它不必像那样工作,它可能在
sizeof(int) == sizeof(int*)的平台上合法地失败,例如,如果指针通过不同的寄存器返回到ints in使用的调用约定。 -
在 C99 环境中,编译器应该至少给你一个关于
malloc()隐式声明的警告。 GCC 说:warning: incompatible implicit declaration of built-in function 'malloc'也是。
标签: c pointers segmentation-fault