所以我,试图解决一项任务.一个已经有代码,但系统输出,"堆栈溢出"我是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)
看起来像算法正常工作,但只有问题是堆栈.非常感谢!
根本原因:
正如你猜对了,堆栈是有限的,似乎你的分配足够大,可以通过它来满足.这不是语言语法错误,因此它不保证编译错误,但会导致运行时异常,从而导致崩溃.
解决方案1:
你可以使数组全局化,全局数组的分配不在堆栈上,所以它应该适合你:
int a [200000];
int main()
{
.....
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:
你可以用一个 std::vector
解决方案3:
您可以使用动态分配new.
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |