所以我试图解决一个任务。
a 已经有代码,但系统输出“堆栈溢出”
我是 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");
}
看起来算法工作正常,但唯一的问题是堆栈。多谢!
根本原因:
正如您猜对的那样,堆栈是有限的,并且您的分配似乎足够大,可以通过它来满足。这不是语言语法错误,因此不会导致编译错误,但会导致运行时异常,从而导致崩溃。
解决方案一:
您可以使数组成为全局数组,全局数组的分配不在堆栈上,因此它应该适合您:
int a [200000];
int main()
{
.....
}
解决方案2:
你可以使用std::vector
解决方案3:
您可以通过以下方式使用动态分配new
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)