相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

在循环中的什么时候整数溢出变成未定义的行为?

这是一个例子来说明我的问题,其中涉及一些我不能在这里发布的更复杂的代码.

#include <stdio.h>
int main()
{
    int a = 0;
    for (int i = 0; i < 3; i++)
    {
        printf("Hello\n");
        a = a + 1000000000;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个程序在我的平台上包含未定义的行为,因为它a会在第3个循环中溢出.

这是否会使整个程序具有未定义的行为,或者仅在溢出实际发生之后?编译器是否可能a 会解决溢出问题,因此它可以声明整个循环未定义,并且不会打扰运行printfs,即使它们都在溢出之前发生?

(标记为C和C++,即使它们不同,因为如果它们不同,我会对这两种语言的答案感兴趣.)

c c++ integer-overflow undefined-behavior

85
推荐指数
7
解决办法
1万
查看次数

捕获异常:除以零

当我尝试除以0时,下面的代码没有捕获异常.我是否需要抛出异常,或者计算机是否在运行时自动抛出一个异常?

int i = 0;

cin >> i;  // what if someone enters zero?

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling

35
推荐指数
3
解决办法
8万
查看次数

c ++除以0

我正在进行长时间的模拟.我将结果记录到矢量中以计算有关数据的统计数据.我意识到,从理论上讲,这些样本可能是零除的结果; 这只是理论上的,我很确定情况并非如此.为了避免在修改代码后重新运行模拟,我想知道在这种情况下会发生什么.我是否能够意识到是否发生了0分裂?我会收到错误消息吗?(暂时没有处理例外情况).

谢谢

c++ divide-by-zero

16
推荐指数
2
解决办法
4万
查看次数