我无法访问我的原始帐户.如果可能,请主持人合并帐户.
这是我的问题.以下C程序是IA-64的段错误,但在IA-32上工作正常.
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
在C中,默认的返回类型是int函数不是原型.在ia64中,指针的大小大于int,因此它可以是段错误的.
更新:问题基本上是为什么你应该总是为你的函数建立原型(或者包括相应的标题).
malloc我能想到的原因之一是考虑到 99 之前的编译器缺少 原型。
隐式 int (返回类型)已被弃用。但是,如果您的代码出现段错误,则意味着编译器假定函数(作用域内没有任何原型)默认返回整数。结果malloc将被视为返回整数而不是指针。
在 32 位实现上sizeof(int),sizeof(void*)每个都是 32 位。在 64 位上的实现sizeof(int)仍然相同,但是sizeof(void*)64 位。
将 64 位指针截断为 32 位可能会导致该问题。
包括<stdlib.h>解决问题。