问题标签 [sigfpe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
45 浏览

c++ - 当我运行这个 C++ 代码时,我在 Codechef 上得到了运行时错误“SIGFPE”。如何解决这个问题?

/* 当我运行这个 C++ 代码时,我在 Codechef 上得到了运行时错误“SIGFPE”。如何解决这个问题?

解释

测试用例1:最佳填充是[5,0,5,0,5,0,5,0,5,0]

测试用例 2:最佳填充是 [6,6,5,6,6,0,6,6]

测试用例 3:最佳填充是 [2,1,2]。*/

0 投票
1 回答
72 浏览

c - 是否可以通过 SIGFPE FPE_INTOVF 在 C (POSIX/Linux) 中捕获整数溢出异常?

我觉得这是一个愚蠢的问题,但我发现关于该主题的信息为零(不是这里也不是任何地方),所以这是问题:

上下文(您可能已经知道):SIGFPE异常和si_code字段

在 POSIX/Linux 中,我们有一种特殊的信号称为SIGFPE(尽管它的名字,它同时用于浮点和整数算术错误)。SIGFPE当我们为using注册一个信号处理程序时sigaction(),我们的处理程序还会收到一个名为的字段,该字段si_code解释了SIGFPE引发特定异常的原因。例如,其中一个可能的si_code值是 ,FPE_INTDIV您可以通过除以 来快速测试int0

问题:那怎么FPE_INTOVF办?

我的问题是关于一个特定的si_code,那就是FPE_INTOVF。此代码描述为Value signalling integer overflow in case of SIGFPE signal.

问题是我从未遇到过引发此信号的示例,也没有找到使操作系统引发此类信号的方法:当我在 C 中进行整数溢出时,不会SIGFPE引发异常。但是FPE_INTOVFfor 的值SIGFPE是一种暗示,它可能会在整数溢出的情况下使主机抛出(就像它已经对整数除以零所做的那样)。

问题:

FPE_INTOVF无法使用吗?它是否只是一种信号类型的占位符,没有符合 POSIX 的操作系统曾经实现过?或者是否可以指示操作系统在整数溢出的情况下抛出这种信号?

我真的对FPE_INTOVF使用sigaction().


PS:我认识到无符号整数溢出在技术上不是 C 中的错误(它在 C 中根本不存在,因为所有无符号整数算术都有“包装”行为),但有符号整数溢出确实是未定义的行为,所以我希望处理FPE_INTOVF后者。

0 投票
1 回答
42 浏览

c - 为什么浮点错误消息未在 stderr 上打印?

我正在使用 java 应用程序运行 c 语言代码java.lang.ProcessBuilder。如果此 c 语言代码产生任何输出和错误,我可以通过process.getInputStream()和读取这些process.getErrorStream()。但在某些情况下(当退出代码 = 136 或 139 时),例如如果代码执行失败floating point error,我在进程的错误流中没有收到任何错误。因此,我尝试直接在 shell 上运行我的 c 语言代码,并将 stderr 和 stdout 重定向到单独的文件。代码.c

我正在运行的命令:

如您所见,上面的错误仅在 shell 上打印,但不重定向到err.log. 此外,err.log 中没有任何内容。我的问题是为什么这不在 stderr 流中打印?根据我的理解,如果它没有在 stderr 中打印,我将无法通过 process.getErrorStream 读取它。无论代码执行生成的错误消息是什么,我都想将其展示给最终用户。