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

时间:2013-12-13 07:14:17

标签: c++ runtime-error

我一直在解决这个问题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]='\0';
        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;

}

1 个答案:

答案 0 :(得分: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小于数组大小?

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