将整数存储为 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
个数组。
我遇到了分段错误,我不确定原因: 我有这段代码: 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
个数组。