Ex 2 Série 6 corrigé bonus

Ex 2 Série 6 corrigé bonus

by David Leonardo Lazar -
Number of replies: 2

Bonjour,

Lorsque j'essaie d’exécuter le corrigé de l'exercice 2 de la série 6 :

(Partie 3 (niveau 2) : troisième amélioration)

J’ai le message suivant après avoir introduit 3 et 2 : Matrice trop grande pour être allouée

Quand je debug avec gdb j’observe 2 choses :

1.     No symbol Symbol SIZE_MAX in current context. (Alors qu’elle est définie de manière globale)

2.     Après avoir passé par else {calloc …} ; resultat->m = 0x0 (donc NULL) et on entre dans une boucle infinie.

Est-ce qu’il faut ajouter qqch au code pour qu’il roule bien (libraby ?) et pourquoi le utiliser calloc à la place de realloc (resultat->m, ligne * colones * sizeof(double)) ?

In reply to David Leonardo Lazar

Re: Ex 2 Série 6 corrigé bonus

by Tom Louis Demont -

Alors pour que tout se passe bien il faut importer <stdlib.h>, et pour le calloc plutot que realloc je dirais que (si tu parles bien de lire_matrice) vu que c'est la première fois que t'alloues la mémoire pour ta matrice tu veux bénéficier de tous les avantages de calloc (initialisation, évite les overflows ...), puis realloc c'est quand tu veux garder intactes les valeurs deja entrées (alors qu'à ce moment de lire_matrice t'en as pas encore)

In reply to David Leonardo Lazar

Re: Ex 2 Série 6 corrigé bonus

by Jean-Cédric Chappelier -

vous parlez bien de matrices4.c (le lien est fourni au dessus du corrigé [https://progos.epfl.ch/series/src/matrices4.c]) ?
Est-ce bien exactement le même fichier qui vous donne ces erreurs ? (c'est étrange).

stdlib.h est bien inclu dans le .c ; mais je crois comprendre que vous parliez du débogueur : c'est normal que SIZE_MAX ne soit pas connu du debogueur en tant qu'expression car c'est une macro (nous verrons les macros plus tard dans le cours). Pour voir une macro dans gdb il faut faire :
info macro NOM
p.ex.
info macro SIZE_MAX
qui devrait vous donner -1.

Pour votre problème de calloc qui retourne NULL : demandez à gdb la valeur de la taille passée à calloc. Elle doit être trop grande (variable non initialisée ??).

Pour le reste, Tom a répondu correctement.