gpt4 book ai didi

c - 为什么此代码会导致浮点异常 - SIGFPE

转载 作者:太空狗 更新时间:2023-10-29 15:22:27 25 4
gpt4 key购买 nike

使用 gcc 4.7:

$ gcc --version
gcc (GCC) 4.7.0 20120505 (prerelease)

代码 list (test.c):

#include <stdint.h>

struct test {
int before;

char start[0];
unsigned int v1;
unsigned int v2;
unsigned int v3;
char end[0];

int after;
};

int main(int argc, char **argv)
{
int x, y;

x = ((uintptr_t)(&((struct test*)0)->end)) - ((uintptr_t)(&((struct test*)0)->start));
y = ((&((struct test*)0)->end)) - ((&((struct test*)0)->start));

return x + y;
}

编译&执行

$ gcc -Wall -o test test.c && ./test
Floating point exception

SIGFPE 是由第二个赋值 (y = ...) 引起的。在汇编列表中,这一行有一个分区?请注意,x= 和 y= 之间的唯一区别是强制转换为 (uintptr_t)。

最佳答案

忽略由于违反标准约束而导致的未定义行为,gcc 在这里所做的是计算指向 char[0] 的两个指针之间的差异 - &(((struct test *)0)->start)&(((struct test*)0)->end),并将差值除以 char[0 ],当然是 0,所以除以 0。

关于c - 为什么此代码会导致浮点异常 - SIGFPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12591634/

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