我遇到了以下C难题:
问:为什么以下程序在IA-64上出现段错误,但在IA-32上却可以正常工作?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
我知道int
64位计算机上的大小int
可能与指针的大小不同(可能是32位,而指针可能是64位)。但是我不确定这与上面的程序有什么关系。有任何想法吗?
这段代码可以在我的64位计算机上正常运行。如果您
—
mpenkov 2011年
#include stdlib.h
(对于malloc),它甚至会在没有警告的情况下进行编译
@delnan-尽管它不必那样工作,但它可能会在平台上合法失败
—
柔印
sizeof(int) == sizeof(int*)
,例如,如果int
在所使用的调用约定中通过不同的s 返回了指针,则返回了该指针。
在C99环境中,编译器应至少为您提供有关的隐式声明的警告
—
乔纳森·莱夫勒
malloc()
。海湾合作委员会说:warning: incompatible implicit declaration of built-in function 'malloc'
也是。
stdlib.h
不被列入愚蠢的事情吗?