我的代码编译并正确运行,除非我将int res[2000+1][2000+1];移动到main中,否则会出现分段错误,为什么会发生这种奇怪的行为?为什么在本地定义变量会导致分段错误?
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#define ll long long int
#define S(a) scanf("%d",&(a))
#define SL(a) scanf("%lld", &(a))
#define P(a) printf("%d",(a))
#define PL(a) printf("%lld",(a))
#define PTR(a) printf("%s",(a))
#define STR(a) scanf("%s",(a))
#define SP printf(" ")
#define pb push_back
#define mp make_pair
using namespace std;
bool sort_pred(const pair<int,int>& left, const pair<int,int>& right)
{
return left.first < right.first;
}
int res[2000+1][2000+1];
int main()
{
int s,n;
S(s);S(n);
vector <int> v (n+1);
vector <int> w(n+1);
for(int i=0;i<n;++i)
{
cin>>w[i];
cin>>v[i];
}
for(int i=0;i<=n;++i)
{
for(int j=0;j<=s;++j)
{
if(i==0 ||j==0)
res[i][j]=0;
else if(w[i-1]<=j)
{
res[i][j]=max(res[i-1][j-w[i-1]]+v[i-1],res[i-1][j]);
}
else
res[i][j]=res[i-1][j];
}
}
std::cout<<res[n][s];
return 0;
}发布于 2013-10-05 22:33:06
如果将它移动到main中,它将成为一个基于堆栈的变量,并且它相当大(16M?)为了堆叠。您可以使用malloc、new或使用std::vector动态分配它。在文件的顶层,它是一个全局变量,因此在进程启动时分配。
发布于 2013-10-05 22:34:08
考虑一下int res[2000+1][2000+1]的大小。堆栈上通常没有足够的空间容纳这样大小的对象,如果将其声明为局部变量,就会出现这样的空间。
发布于 2013-10-06 06:35:53
为了让事情更容易,只需声明
int res[2000];它将是allocated.So,唯一的pblm是大小分配已经达到了一个饱和点的局部变量。
https://stackoverflow.com/questions/19203411
复制相似问题