gpt4 book ai didi

c++ - 运行时发生奇怪的崩溃

转载 作者:太空狗 更新时间:2023-10-29 23:36:06 24 4
gpt4 key购买 nike

有谁知道,为什么以下代码在使用 g++ 编译时会崩溃?

#include <iostream>

unsigned long getSumDivisors(const unsigned long number) {
unsigned long sum = 0;
for(unsigned long i = 0; i < number; ++ i) {
if(number % i == 0) {
sum += i;
}
}
return sum;
}

int main() {
std::cout << getSumDivisors(5);
return 0;
}

当我删除 sum += i;它不会崩溃。

我尝试在 windows 和 linux linaro 下编译它

g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3版权所有 © 2012 Free Software Foundation, Inc.这是免费软件;有关复制条件,请参阅来源。没有保修单;甚至不是为了特定目的的适销性或适用性。

g++ (tdm-2) 4.8.1版权所有 (C) 2013 Free Software Foundation, Inc.这是免费软件;有关复制条件,请参阅来源。没有保修单;甚至不是为了特定目的的适销性或适用性。

最佳答案

它会导致 SIGFPE。原因是因为被零除:

if(number % i == 0)

你可以在这里修复它:

 for(unsigned long i = 1; i < number; ++ i)

SIGFPE 通常会在具有浮点单元的系统上发生,在这种情况下会引发异常。实际行为取决于实现细节并且未定义。在具有浮点仿真库的旧系统上,它可能返回 0 或随机结果。

关于c++ - 运行时发生奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732822/

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