【问题标题】:C++ Segmentation fault error when storing integers as int arrays将整数存储为 int 数组时出现 C++ 分段错误错误
【发布时间】:2021-01-22 08:54:52
【问题描述】:

我遇到了分段错误错误,我不确定原因: 我有这个代码: enierlong.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 很陌生,所以如果我的问题被问得不正确,请告诉我 提前致谢

【问题讨论】:

  • n3 未定义
  • 您可能在堆栈上分配了太多内存。
  • 这是@Zaiborg 的问题,另一个函数称为数组数组。我通过使用static 定义解决了这个问题。
  • 您应该明确查看 c++ 标准容器(请参阅我的回答)进行分配。没有容器的 C++ 并不是真正从“好旧的 C”飞跃。只要您不需要太多内存,就可以在堆上分配。
  • 我对您的解决方案的问题是该结构是在分配期间给我的,我不允许更改它。不过,我肯定会在校外按你的方式做。

标签: c++ arrays segmentation-fault


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2020-11-08
    • 2018-09-03
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多