Stack overflow
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 5000000
int main()
{
int a[MAX];
int *q;
q=(int *)malloc(MAX*sizeof(int));
if(q!=NULL)
{
int T,m,n,i;
scanf("%d",&T);
while(T--)
{
for(i=0;i<5000000;i++)
{
a[i]=0;
}
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
a[n]=1;
}
for(i=0;i<5000000;i++)
if(a[i]==1)
{
printf("%d\n",i);
}
}
}
free(q);
return 0;
}
变得的时候总是说 : Stack overflow
要怎样改才行? 在C语言里 谢了~
[解决办法]
修改下工程属性---链接----系统----默认栈大小
[解决办法]
请谷歌malloc最大可分配多大内存
[解决办法]
栈溢出,你修改一下吧。栈内存太小。。。。
[解决办法]
int main()
{
int a[MAX];
应该将int a[MAX];
放到main函数外面,即:
int a[MAX];
int main()
{
[解决办法]
要么改成全局变量,要么定义成指针,通过malloc申请.
[解决办法]
stack overflow 是栈溢出的意思。
原因是是你在栈上定义了超过栈大小的变量,也就是int a[MAX]。栈的大小通常比较小的。
修改方法,理论上以下三个都可以。
1. 修改栈大小(不同的操作系统做法不尽相同,可以去google)
2. 不在栈上分配,而是在全局数据区分配(同4楼,将a的定义放在main函数外面)
3. 不在栈上分配,而是在堆上分配(同变量q的做法)
[解决办法]
程序为数组分配的空间已经超过栈的空间了。
要么定义全局数组、要么手动分配、要么参考下面这篇文章
http://www.cnblogs.com/titer1/archive/2012/03/31/2427436.html