开发C++;运行大内存程序时崩溃 我对编程很陌生。我在Windows 7(x86)上使用DEV C++。我正在尝试运行下面的程序。我不认为有一个逻辑错误导致程序崩溃。程序运行在一个在线JUGDE(代码段)上。 要成功执行程序,我应该做什么
我的解决方案:开发C++;运行大内存程序时崩溃 我对编程很陌生。我在Windows 7(x86)上使用DEV C++。我正在尝试运行下面的程序。我不认为有一个逻辑错误导致程序崩溃。程序运行在一个在线JUGDE(代码段)上。 要成功执行程序,我应该做什么,c++,crash,C++,Crash,我的解决方案: #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++)
#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;
}
#包括
使用名称空间std;
int main()
{
int n,i,j;
长a[100000],b[100000],排序[200000],温度;
char aresult[100000],bresult[100000];
字符*排序点[200000];
cin>>n;
对于(i=0;i>a[i]>>b[i];
a结果[i]=“0”;
b结果[i]=“0”;
}
对于(i=0;i您在堆栈上分配了太多。线程的默认堆栈大小是1MB,除非它被显式更改,并且您的数组超过了1MB
相反,将数据移动到堆上
long long *a=new long long[100000];
当您仅限制进程的可用虚拟内存时,32位Windows应用程序的可用虚拟内存将为2GB。您正在经历一种称为堆栈溢出的状态,因为程序正在崩溃。这主要是因为存在大数组元素的静态分配。因为在您的程序中,n是一个变量在循环测试条件下,这是必需的。我建议您动态分配内存。这将节省大量浪费的内存。为此,您可以使用新的运算符。如果您想要更好地组织数据,甚至可以使用链接列表。但这会增加程序的复杂性。不要分配吃了堆栈上的所有东西。这很可能太多了。您介意发布指向确切问题的链接吗?您是否尝试运行调试器以确认没有逻辑问题?由于堆栈大小的限制,您无法定义具有如此大大小的静态数组。请改为使用动态数组。例如a=new long long[ 100000 ] <代码>或使用<代码>向量A(100000)< /C> > ShaneHsu,因为他是C++的,他瞄准的是静态大小的数组,<代码> STD::向量< /代码>也同样有效。<代码> STD::向量A(100000);< /Cord> @ ShaneHsu。