Bonjour
Voici la fonction add:
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
Je vois pas trop où j'aurais pu faire une erreur.
Voici une partie du code:
double *saisie_pol(HINSTANCE hinst, HWND hEdit, double *coefs, int deg) { for(q=deg;q>=0;q--) { DialogBoxParam(hinst, "DIALOG4", hEdit, (DLGPROC)Dialog4Proc, (LPARAM)hEdit); coefs[q] = *cfs; free(cfs); } return coefs; } char *saisie_degre(HINSTANCE hinst, HWND hEdit, polynome *p, double *coefs, int deg, int nb_poly, char *szBuffer1) { int m = 0; char *szBuffer; szBuffer = (char*)malloc(256*sizeof(char)); if (nb_poly == 0) deg = (int)DialogBoxParam(hinst, "DIALOG2", hEdit, (DLGPROC)Dialog2Proc, (LPARAM)hEdit); else if (nb_poly == 1) deg = (int)DialogBoxParam(hinst, "DIALOG3", hEdit, (DLGPROC)Dialog3Proc, (LPARAM)hEdit); new_pol(&p[nb_poly],deg); saisie_pol(hinst, hEdit, coefs, deg); init_pol(&p[nb_poly],coefs); m += sprintf(szBuffer, "p%d(x) = %s", nb_poly + 1, afficher(&p[nb_poly], szBuffer1)); free(szBuffer1); return szBuffer; } void MainWnd_Command(HINSTANCE hinst, HWND hEdit, WPARAM wParam) { char *buf, *temp; int m, deg, nb_poly; double *coefs, eval, x; polynome *tampon, *p; buf = (char*)malloc(256*sizeof(char)); temp = (char*)malloc(256*sizeof(char)); coefs = (double*)malloc((deg+1)*sizeof(double)); tampon = (polynome*)malloc(2*sizeof(polynome)); p = (polynome*)malloc(2*sizeof(polynome)); m = 0; if (LOWORD(wParam) == IDM_DERIV) { m = sprintf(buf, "Polynôme à dériver:\r\n %s", saisie_degre(hinst, hEdit, &p[0], coefs, deg, 0, temp)); free(temp); tampon[0] = derive(p[0]); m += sprintf(buf + m, "\r\n\r\n p1'(x) = %s", afficher(&tampon[0], temp)); free(temp); } else if (LOWORD(wParam) == IDM_SOMME) { m = sprintf(buf + m, "Polynômes à ajouter:\r\n %s\r\n ", saisie_degre(hinst, hEdit, &p[0], coefs, deg, 0, temp)); free(temp); m += sprintf(buf + m, "%s", saisie_degre(hinst, hEdit, &p[1], coefs, deg, 1, temp)); free(temp); tampon[0] = add(p[0],p[1]); m += sprintf(buf + m, "\r\n\r\n p1(x) + p2(x) = %s", afficher(&tampon[0], temp)); free(temp); } SetWindowText(hEdit, buf); free(tampon); free(p); free(buf); }Pour ce qui est de la dérivation (IDM_DERIV), ça marche.
Pour la somme (IDM_SOMME), c'est là que j'ai l'erreur.
Si j'intercale des "SetWindowText(hEdit, buf);" dans IDM_SOMME, les polynomes p[0] et p[1] s'affichent correctement. C'est après que ça se gâte, au niveau de tampon[0]=add(p[0],p[1]).
Si tu vois qcc de louche...
Merci