有人能解释为什么我的代码在cpp中出现运行时错误吗



有人能解决这个运行时错误吗?

Status :Time limit exceeded
Time:
5 secs
Memory:
5.368 Mb
Input
4 8 4
1 2 1 2 5
3 5 1 3 4
1 2 4 5 11
1 1 1 3 12
Runtime Error
SIGTSTP
#include <iostream>
using namespace std;
int main() {
// your code goes here
int n,m,k,cert=0;
cin>>n>>m>>k;
int a;
for(int z=0;z<n;z++)
{
int sum=0;
for(int i=0;i<k;k++)
{
cin>>a;
sum+=a;
}
cin>>a;
if(sum>=m && a<=10)
cert++;
}
cout<<cert;
return 0;
}

这是因为您的代码运行时间很长。

看看这个循环:

for (int i = 0; i < k; k++) {

k将增加,而i保持在0,因此i < k将始终是true

k在某个时刻达到其极限INT_MAX,而您执行k++时,它将导致有符号整数溢出,因此程序具有未定义的行为。

如果不知道你的代码应该做什么,就不可能给出如何使其工作的确切建议,但我怀疑你想要的是:

for (int i = 0; i < k; i++) {

有人已经回答了这个问题,但还有一件有趣的事情要讨论。我注意到这个问题是因为它有cppcheck标记。我猜你无意中碰到了一个令人兴奋的话题:(。正如我所看到的,这是你的第一个问题,所以也许你认为";cppcheck";标签的意思是";我的代码有问题。你能检查一下吗&";。实际上;cppcheck";是用于在C和C++中搜索代码错误的静态分析器的名称。

嗯,我觉得这个主题很有趣,因为实际上静态分析可以很容易地检测到上面代码片段中的错误。使用静态分析器,您不需要问这样的问题。因此,分析器可以节省您的时间——它们将帮助检查您的代码并发现错误。

不幸的是,Cppcheck没有找到错误——我去了CppcheckOnline Demo网页,检查了这个问题的代码片段。不幸的是,这个分析器没有发出任何关于循环的警告。分析器并不完美,尤其是这种相对简单的静态分析器。但它至少有两个优点——它是免费的和开源的。

嗯,我没有放弃——我用了另一个分析仪。这就是PVS Studio静态分析器的联机模式:https://godbolt.org/z/TEsdeG7oM

你能想象吗?PVS Studio发出了描述此错误的警告:V683请考虑检查循环表达式。可能应该增加i变量而不是k变量。

我希望你会发现这些信息足够有用和有趣,可以更有效地使用静态分析器的线索来学习C++。

相关内容

最新更新