以下代码中出现运行时错误的原因是什么
What is the cause of runtime error in the following code?
我一直在解决这个问题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小于数组大小?
我建议您通过调试器运行它。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 你能解释一下什么运行时错误是如何解决它的吗?
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 我的代码中出现运行时错误的可能原因是什么?
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 从成员变量更新类变量或调用类功能是给出运行时错误
- 什么是通用运行时组件 #ifdef 适用于Windows(UWP)而不是iOS
- 是什么导致了数组越界运行时错误?
- 导致此运行时错误的原因是什么,如何纠正它?
- 在任何平台上执行任何Qt5应用程序的重要dll文件是什么(运行时文件dll)
- 意外的输出而不是运行时错误
- 以下代码中出现运行时错误的原因是什么
- 无法弄清楚为什么我的程序在 spoj 上给出运行时错误而不是在 ideone 上给出运行时错误的原因
- 运行时错误 -f1.exe 不存在或不是可执行文件
- 什么是“Microsoft C++可视化运行时库:运行时错误!
- 在函数之间传递堆上的数组时,是什么导致了这个运行时错误,c++
- 具有运行时错误的业力生成器的调试技术是什么