首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Stack overflow,该如何处理

2013-01-08 
Stack overflow#includestdafx.h#includestdio.h#includestdlib.h#includestring.h#define MAX 50

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

热点排行
Bad Request.