gpt4 book ai didi

c - 为什么这段代码在 64 位架构上会出现段错误,但在 32 位架构上却能正常工作?

转载 作者:太空狗 更新时间:2023-10-29 16:14:44 26 4
gpt4 key购买 nike

我遇到了以下 C 难题:

问:为什么下面的程序在 IA-64 上会出现段错误,但在 IA-32 上却能正常工作?

  int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}

我知道 64 位机器上 int 的大小可能与指针的大小不同(int 可能是 32 位而指针可能是64 位)。但我不确定这与上述程序有何关系。有什么想法吗?

最佳答案

投向int*掩盖了一个事实,即没有适当的 #include malloc 的返回类型假定为 int . IA-64 恰好有 sizeof(int) < sizeof(int*)这使得这个问题很明显。

(还要注意,由于未定义的行为,即使在 sizeof(int)==sizeof(int*) 成立的平台上它仍然可能失败,例如,如果调用约定使用不同的寄存器来返回指针而不是整数)

comp.lang.c FAQ有一个条目讨论 why casting the return from malloc is never needed and potentially bad .

关于c - 为什么这段代码在 64 位架构上会出现段错误,但在 32 位架构上却能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com