以下代码中出现运行时错误的原因是什么

What is the cause of runtime error in the following code?

本文关键字:是什么 运行时错误 代码      更新时间:2023-10-16

我一直在解决这个问题http://www.codechef.com/DEC13/problems/MARBLEGF/我不明白为什么一次又一次地出现运行时错误,有人能帮我吗?提前感谢。。!!这是代码。

#include<iostream>
using namespace std;
int main()
{
    long long int n;
    long int q;
    int i,a,b,sum_temp=0,flag=0;
    char act[10];
    cin>>n;
    cin>>q;
    int array[n],temp[n],temp2[n];
    long int sum;
    for(i=0;i<n;i++){
        cin>>temp[i];
        temp2[i]=0;
        array[i]=0;
    }
    while(q>0){
        for(i=0;i<3;i++){
            cin>>act[i];
        }
        act[3]='';
        a=act[1]-'0';
        b=act[2]-'0';
        if(act[0]=='S'){
            if(array[b]==0){
                for(i=0;i<=b;i++){
                    if(i>0){
                        array[i]=array[i-1]+temp[i];
                    }else{
                        array[i]=temp[i];
                    }
                }
            }
            sum_temp=0;
            for(i=a;i<=b && flag==1;i++){
                sum_temp=sum_temp+temp2[i];         
            }
            if(a>0){
                sum=(array[b]-array[a-1])+sum_temp;
            }
            else{
                sum=array[b]+sum_temp;
            }
            cout<<sum<<endl;
        }
        else if(act[0]=='G'){
            temp2[a]=b;
            flag=1;
        }
        else if(act[0]=='T'){
            temp2[a]=-b;
            flag=1;
        }
        q--;
    }

    return 0;
}

编辑:

根据您提供的链接,N的范围为2 ≤ N ≤ 1000000
因此,正如@Retired Ninja所建议的那样,有可能出现堆栈溢出。

解决方案:使用矢量。

除其他外,这不是有效的C++:

cin>>n;
cin>>q;
int array[n],temp[n],temp2[n];

这里n应该是一个编译时间常数。最好使用

std::vector<int> array( n );

为什么会出现运行时错误的一个原因是您可能访问了越界数组:

b=act[2]-'0';
if(act[0]=='S'){
  if(array[b]==0){

你怎么知道b小于数组大小?

我建议您通过调试器运行它。