将整数存储为 int 数组时出现 C++ 分段错误

C++ Segmentation fault error when storing integers as int arrays

我遇到了分段错误,我不确定原因: 我有这段代码: entierlong.h

const int MAXCHIFFRES = 1000;

typedef int tabEnt[MAXCHIFFRES];

struct EntierLong
{
    bool Negatif;
    tabEnt Chiffres;
};
EntierLong addition(EntierLong n1, EntierLong n2)
{
  int retenue,somme,i;
  n3 = Convertir(0);
  if (n1.Negatif != n2.Negatif)
  {
    cout<<"Les entierslongs doivent être de même signe.\n";
    return(n3);
  }
  n3.Negatif = n1.Negatif;
  retenue = 0;
  for(i=0;i<=MAXCHIFFRES-1;i++)
  {
    somme = n1.Chiffres[i]+n2.Chiffres[i]+retenue;
    retenue = int(somme>=10);
    n3.Chiffres[i]=somme-retenue*10;
  }
  return(n3);
}

EntierLong Un_2=Convertir(0), Un_1=Convertir(1), Un=Convertir(0);
EntierLong fibonnaci(int n)
{
    int i=0;
    switch(n)
    {
        case 0:
            return(Un_2);
            break;
        case 1:
            return(Un_1);
            break;
    }
    for(i=2;i<=n;i++)
    {
        Un=addition(Un_2,Un_1);
        Un_2 = Un_1;
        Un_1 = Un;
    }
    return(Un);
}

基本上我将整数存储在整数数组中以计算大的斐波那契数 一切正常,直到我将 MAXCHIFFRES 增加到 1000 以上 它给了我 Segmentation fault: 11 据我了解,我的堆在某个时候溢出了 我试过将定义放在函数之外来解决这个问题,但无济于事。

我不明白的是,将两个 EntierLong 相加对我的函数有效。 我是 cpp 的新手,所以如果我的问题问得不当,请告诉我 提前致谢

如果您有内存分配问题,您可以将 EntierLong 类型替换为

struct EntierLong
{
    bool Negatif;
    std::vector<int> Chiffres;
    EntierLong()
    {
        Chiffres.resize(MAXCHIFFRES,0);
    }
};

构造函数将在堆上分配 Chiffres 个数组。