我是编程新手。我在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;
}
答案 0 :(得分:1)
你在堆栈上分配太多了。一个线程的默认堆栈大小是1MB,除非它已被明确更改,并且您的数组超过了它。
相反,将数据移动到堆上。例如:L
long long *a=new long long[100000];
你只限制你的进程的可用虚拟内存,对于32位Windows应用程序,它将是2GB。
答案 1 :(得分:0)
您正在遇到称为堆栈溢出的状态,因为程序正在崩溃。主要是因为存在大型数组元素的静态分配。因为在你的程序中,n是一个变量值,并且在循环测试条件中是必需的,所以我建议你动态分配内存。这将节省大量浪费的内存。为此,您可以使用new运算符。如果您想要一种更好的方式来组织数据,您甚至可以使用链接列表。但它会增加程序的复杂性。