【发布时间】: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