[C]Pointeurs
Résolu/Fermé
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
-
29 déc. 2011 à 19:55
Sauvegarde2 Messages postés 205 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 11 janvier 2015 - 30 déc. 2011 à 00:33
Sauvegarde2 Messages postés 205 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 11 janvier 2015 - 30 déc. 2011 à 00:33
4 réponses
Bonsoir
Je suis étonné que ça ne plante pas complètement.
Tu fais s = malloc(sizeof(p_val)); et quelques lignes plus loin s = s->red;
Mais je ne vois nulle part entre les deux l'initialisation de s->red, qui peut valoir absolument n'importe quoi.
Je suis étonné que ça ne plante pas complètement.
Tu fais s = malloc(sizeof(p_val)); et quelques lignes plus loin s = s->red;
Mais je ne vois nulle part entre les deux l'initialisation de s->red, qui peut valoir absolument n'importe quoi.
Si j'ai bien compris ce que tu cherches à faire...
Quand tu recopies ton dernier coefficient, tu devrais mettre son champ red à NULL.
Or, tel que tu le fais, tu crées un coefficient supplémentaire, puis tu en perds la trace en mettant à NULL le pointeur qui te permettait de savoir où il était. Tu ne sauras jamais désallouer.
Quand tu recopies ton dernier coefficient, tu devrais mettre son champ red à NULL.
Or, tel que tu le fais, tu crées un coefficient supplémentaire, puis tu en perds la trace en mettant à NULL le pointeur qui te permettait de savoir où il était. Tu ne sauras jamais désallouer.
Poly poly_copy(Poly P) { Poly p = P, S = malloc(sizeof(p_val)), s = S; while(p != poly_zero) { s->coef = p->coef; s->deg = p->deg; p = p->red; if (p != poly_zero) { s->red = malloc(sizeof(p_val)); s = s->red; } else s->red = poly_zero; } return S; }
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
261
Modifié par Sauvegarde2 le 29/12/2011 à 22:47
Modifié par Sauvegarde2 le 29/12/2011 à 22:47
J'ai corrigé :
Avec la convention que les majuscule représentent les début de listes et les minuscule sont utilisées pour les parcourir.
Ce code s'arrête sur une erreur, il copie correctement mais ajoute un monôme bidon à la fin (qui justement vaut n'importe quoi).
Alors que pourtant le dernier élément du nouveau polynôme est bien mis sur NULL. et j'ai vérifié la boucle est parcourue le bon nombre de fin. Je n'y comprend rien.
En tout cas merci pour l'aide, je progresse un peu.
Poly poly_copy(Poly P)
{
Poly p = P, S = malloc(sizeof(p_val)), s = S;
while(p != poly_zero)
{
s->coef = p->coef;
s->deg = p->deg;
s->red = malloc(sizeof(p_val));
s = s->red;
p = p->red;
}
s = poly_zero;
return S;
}
Avec la convention que les majuscule représentent les début de listes et les minuscule sont utilisées pour les parcourir.
Ce code s'arrête sur une erreur, il copie correctement mais ajoute un monôme bidon à la fin (qui justement vaut n'importe quoi).
Alors que pourtant le dernier élément du nouveau polynôme est bien mis sur NULL. et j'ai vérifié la boucle est parcourue le bon nombre de fin. Je n'y comprend rien.
En tout cas merci pour l'aide, je progresse un peu.
Poly poly_copy(Poly P)
{
Poly p = P, S = malloc(sizeof(p_val)), s = S;
while(p != poly_zero)
{
s->coef = p->coef;
s->deg = p->deg;
s->red = malloc(sizeof(p_val));
s = s->red;
p = p->red;
}
s = poly_zero;
return S;
}
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
261
30 déc. 2011 à 00:33
30 déc. 2011 à 00:33
Ah oui ça marche impeccable comme ça.
Merci du coup de main :)
Merci du coup de main :)