首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割故障(核心抛出)如果变量在主?

分割故障(核心抛出)如果变量在主?
EN

Stack Overflow用户
提问于 2013-10-05 22:31:12
回答 3查看 667关注 0票数 1

我的代码编译并正确运行,除非我将int res[2000+1][2000+1];移动到main中,否则会出现分段错误,为什么会发生这种奇怪的行为?为什么在本地定义变量会导致分段错误?

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-05 22:33:06

如果将它移动到main中,它将成为一个基于堆栈的变量,并且它相当大(16M?)为了堆叠。您可以使用malloc、new或使用std::vector动态分配它。在文件的顶层,它是一个全局变量,因此在进程启动时分配。

票数 3
EN

Stack Overflow用户

发布于 2013-10-05 22:34:08

考虑一下int res[2000+1][2000+1]的大小。堆栈上通常没有足够的空间容纳这样大小的对象,如果将其声明为局部变量,就会出现这样的空间。

票数 2
EN

Stack Overflow用户

发布于 2013-10-06 06:35:53

为了让事情更容易,只需声明

代码语言:javascript
复制
int res[2000];

它将是allocated.So,唯一的pblm是大小分配已经达到了一个饱和点的局部变量。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19203411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档