堆栈溢出c ++

0 c++ stack-overflow stack

所以我,试图解决一项任务.一个已经有代码,但系统输出,"堆栈溢出"我是c +中的新手,我的英语不好所以我很抱歉误解=)

   #include <iostream> 

using namespace std;

int main (){
    int n;
    int x;
    int k = 0; // ??????? ??? ???????? ???????
    int a [200000];
 scanf("%d\n",&n);   

 for (int i = 0; i< n; ++i){
     std::cin >> x;
     if (x > 0){
             k++;
             a[k] = x;
           }else if(x == 0){
                 for (int q = 1; q <= k; ++q){ // ??????????? 
                          a[k+q] = a[q];
                     }
                 k *= 2;
                 }else{
                          printf("%d %d\n",a[k],k);
                          k--;
                        }
     }
     system("pause");


}
Run Code Online (Sandbox Code Playgroud)

看起来像算法正常工作,但只有问题是堆栈.非常感谢!

Alo*_*ave 6

根本原因:

正如你猜对了,堆栈是有限的,似乎你的分配足够大,可以通过它来满足.这不是语言语法错误,因此它不保证编译错误,但会导致运行时异常,从而导致崩溃.

解决方案1:

你可以使数组全局化,全局数组的分配不在堆栈上,所以它应该适合你:

int a [200000];

int main()
{
   .....
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:

你可以用一个 std::vector

解决方案3:

您可以使用动态分配new.