谁能弄清楚这段代码如何显示 运行 错误?它正在打印无限时间 -1 以及正确答案

Can anyone figure out how this code showing running error? It is printing infinite time -1 along with correct answer

#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,我无法弄清楚这段代码的问题及其 运行 时间错误问题。

我觉得这里的问题确实比较棘手。您声明了一个函数 int subarraysum(int arr[],int n,int sum)。这里的问题是 return 语句。您的函数 必须 return 一个值,但您的代码没有,采用这种形式。这会导致未定义的行为。 C++ 中的 int main()-函数是 C++ 中唯一具有 non-void-return 值的函数,允许不 return 任何东西。

根据编译器的优化级别,这种未定义的行为可能会导致无限循环,即使 for 循环在接缝退出之前也是如此。尝试在函数末尾取消注释 return 0;,这应该可以完成工作。

顺便说一句。调试你的代码在这里对你没有帮助,因为在调试模式下行为是不同的。那里一切都会好起来的。在 -Wall -Wextra -pedantic 上编译带有所有警告的代码。编译器会告诉你可能有问题。将警告视为错误。