Dev C ++在运行大内存程序时崩溃

时间:2014-01-02 13:51:36

标签: c++ crash

我是编程新手。我在Windows 7(x86)上使用Dev C ++。我正在尝试运行以下程序。我不认为存在导致程序崩溃的逻辑错误。程序是在一个在线jugde(Codeforces)上运行。 我该怎么做才能成功执行该程序?

我的解决方案:

#include<iostream>

using namespace std;

int main()
{
    int n,i,j;
    long long a[100000],b[100000],sort[200000],temp;
    char aresult[100000],bresult[100000];
    char*sortpoint[200000];

    cin>>n;

    for(i=0;i<n;i++)
    {
        cin>>a[i]>>b[i];

        aresult[i]='0';
        bresult[i]='0';
    }

    for(i=0;i<(n/2);i++)
    {
        aresult[i]='1';
        bresult[i]='1';
    }

    i=0;
    j=n+i;

    for(i=0;i<n;i++)
    {
        sort[i]=a[i];
        sort[j]=b[i];

        sortpoint[i]=&aresult[i];
        sortpoint[j]=&bresult[i];

        j++;
    }

    for(i=0;i<(2*n);i++)
    {
        for(j=0;j<(2*n)-i-1;j++)
        {
            if(sort[j]>sort[j+1])
            {
                temp=sort[j];
                sort[j]=sort[j+1];
                sort[j+1]=temp;
            }
        }
    }

    for(i=0;i<n;i++)
    {
        *sortpoint[i]='1';
    }

    cout<<aresult<<endl<<bresult;   

}

2 个答案:

答案 0 :(得分:1)

你在堆栈上分配太多了。一个线程的默认堆栈大小是1MB,除非它已被明确更改,并且您的数组超过了它。

相反,将数据移动到堆上。例如:L

long long *a=new long long[100000];

你只限制你的进程的可用虚拟内存,对于32位Windows应用程序,它将是2GB。

答案 1 :(得分:0)

您正在遇到称为堆栈溢出的状态,因为程序正在崩溃。主要是因为存在大型数组元素的静态分配。因为在你的程序中,n是一个变量值,并且在循环测试条件中是必需的,所以我建议你动态分配内存。这将节省大量浪费的内存。为此,您可以使用new运算符。如果您想要一种更好的方式来组织数据,您甚至可以使用链接列表。但它会增加程序的复杂性。