|
|
|
|
Celà signifie que tu accède à une zone mémoire non allouée (erreur typique en C quand on commence à manipuler des pointeurs ou des tableaux).
#include <stdio.h>
int main(){
int tab[5];
printf("%d\n",tab[69]); //seg fault car tab[69] est hors du tableau
int *x;
*x = 28; // seg fault, car *x est un entier non alloué
return 0;
}
Solution : #include <stdio.h>
#include <stdlib.h>
int main(){
int tab[70];
printf("%d\n",tab[69]);
int *x =(int*)malloc(sizeof(int));
*x = 28;
return 0;
}
Comment détecter une segmentation fault avec gcc+gdb : gcc -g -W -Wall -o plop.exe plop.c gdb plop.exe Dans gdb : r bt A noter que pour windows dev cpp est basé sur gcc... Bonne chance
|
Salut.
p[0]; p[1]; tampon[0]; tampon[0]=add(p[0],p[1]);Comme ça, tu saura exactement à l'apel de quoi ça plante. Salutation ! Char Snipeur |
Bonjour
polynome add(polynome p1,polynome p2)
{
int i,deg;
polynome p;
deg = maxint(p1.degre,p2.degre);
if(p1.degre == p2.degre)
{
while(p1.coef[deg] == -p2.coef[deg])
{
deg--;
}
}
new_pol(&p,deg);
for(i=p.degre;i>=0;i--)
{
if(i>p1.degre) p.coef[i] = p2.coef[i];
else if(i>p2.degre) p.coef[i] = p1.coef[i];
else p.coef[i] = p1.coef[i]+p2.coef[i];
}
return p;
}
Voici la fonction new_pol: void new_pol(polynome *p,int deg)
{
int i;
if(deg>0)
{
p->degre = deg;
p->coef = (double*)malloc(deg+1*sizeof(double));
}
else
{
p->degre = 0;
p->coef = (double*)malloc(sizeof(double));
}
}
et la fonction maxint: int maxint(int x, int y)
{
if(x > y) return x;
else return y;
}
c'est une fois dans le fonction maxint que je me rend compte que le degré et les coefs de p[1] ne sont pplus pris en compte (deg=0, coefs=0X0) alors que ceux de p[0] ne posent pas de problèmes. L'erreur de segmentation survient ensuite lors du calcul des p.coef[i]. Si ça ne vous aide pas, je mettrais tout le code mais c'est un peu long. Merci |