1

内部のメインを移動しない限り、私のコードは正しくコンパイルされ、実行さint res[2000+1][2000+1];れます。セグメンテーション エラーが発生します。変数をローカルで定義するとセグメンテーション エラーが発生するのはなぜですか?

#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;
}
4

3 に答える 3

3

メインに移動すると、スタックベースの変数になり、スタックとしてはかなり大きい (16M?)。malloc、new、または std::vector を使用して動的に割り当てることができます。ファイルの最上位はグローバル変数なので、プロセスの起動時に割り当てられます。

于 2013-10-05T22:33:06.827 に答える
2

のサイズを検討してくださいint res[2000+1][2000+1]。ローカル変数として宣言された場合に表示されるスタック上のサイズのオブジェクトには、十分なスペースがないことがよくあります。

于 2013-10-05T22:34:08.513 に答える