提问者:小点点

有人能搞清楚这段代码是如何显示运行错误的吗? 它正在打印无限时间-1和正确答案


#include <iostream>
using namespace std;

int subarraysum(int arr[],int n,int sum){
    int cur_sum=0,start=0;
    for(int i=0;i<n;i++){

     cur_sum=cur_sum+arr[i];

    while(start<i && cur_sum>sum){
        cur_sum=cur_sum-arr[start];
        start++;
         }

    if(cur_sum==sum)
     {
         cout<<start<<" "<<i;
         return 1;
     }
    }
    cout<<"-1";
  //return 0;  
}
int main() {
    int t;
    cin>>t;
    for(int l=0;l<t;t++){
        int n,s;
    cin>>n>>s;
    int arr[n]={0};
    for(int i=0;i<n;i++)
    {cin>>arr[i];
    }

    subarraysum(arr, n, s);

    }
return 0;
}

这个问题是一个简单的输入输出问题,但它是打印我的答案和无限次-1,我无法解决这个代码的问题和它的运行时间错误问题。


共1个答案

匿名用户

我认为这里的问题确实棘手。 声明一个函数int subarraysum(int arr[],int n,int sum)。 这里的问题是return语句。 您的函数必须返回一个值,但您的代码不能,以这种形式。 这会导致未定义的行为。 C++中的int main()-函数是C++中唯一一个具有non-void-返回值的函数,该值不允许返回任何内容。

根据编译器的优化级别,这种未定义的行为可能会导致无止境的循环,即使seams to exit之前的for-loop也是如此。 尝试在函数末尾取消对return0;的注释,这样应该可以完成任务。

顺便说一句。 在这里调试您的代码不会帮到您,因为在debug-mode中行为是不同的。 在那里一切都会好起来的。 在-wall-wextra-pedantic上编译带有所有警告的代码。 编译器会告诉您可能有问题。 像对待错误一样对待警告。