bonjour
alors voila j ai créer le programme suivant:
mais voila sa m affiche une matrice de la bonne taille mais avec que des 0 . Pourtant tout compile.
Merci
bonjour
alors voila j ai créer le programme suivant:
mais voila sa m affiche une matrice de la bonne taille mais avec que des 0 . Pourtant tout compile.
Merci
Bonjour,
Faire qu'un programme compile, c'est la base et ce n'est pas du tout un exploit. Faire qu'un programme compile, c'est simple. Faire qu'un programme fasse exactement ce que l'on veut, c'est ça le plus important et le plus compliqué.
De plus, votre programme compile, mais, avec un avertissement. Les avertissements ne sont pas des erreurs, mais de très bons conseils de la part du compilateur. Un programme avec des avertissements au cours de la compilation, ce n'est pas bien (sauf de rare cas où l'on ne peut éviter les avertissements, mais c'est très rare).
Veuillez donc prendre en compte l'avertissement et faire en sorte que votre outil de compilation active les avertissements.gcc -Wall -Wextra ./TP1.c -o ./main
./TP1.c: Dans la fonction «*affichage*»:
./TP1.c:155:2: attention : contrôle a atteint la fin non void de la fonction [-Wreturn-type]
}
Comme je suis le plus méchant de ceux qui peuvent répondre sur le forum (ou pas), j'ai aussi effectuer un coup de Valgrind (pour détecter les erreurs de la mémoire). Un bon programme ne doit avoir aucune erreur au niveau de la mémoire (que ce soit des erreurs, ou des fuites). Voici le rapport :
(voir la pièce jointe)
Ça fait beaucoup pour un tel programme.
Pour chaque malloc(), il doit y avoir un free(). En théorie, si une fonction alloue de la mémoire, c'est à elle de la libérer (notamment, car la fonction appelante risque de ne pas le faire et cela provoque une fuite, ou disons, une grande chance pour qu'un jour il y ai une fuite).
Pire, pour votre fonction dilation_t(), vous passez la matrice N et A en paramètre et vous écrasez vos pointeurs directement au début de la fonction avec vos malloc(). Du coup, les paramètres ne sont pas utilisés (vous venez de les remplacez avec d'autres zones mémoire), du coup, vous perdez vos données.
Je vous conseille aussi d'ajouter des commentaires (pas qui traduise le code en français, mais des commentaires expliquant votre réflexion, vos objectifs et comment (quel algorithme) vous utilisez pour remplir vos objectifs).
Aussi, lorsque l'on passe des pointeurs à une fonction, il est bon de vérifier que ces pointeurs ne sont pas NULL (ne sait t-on jamais, celui qui appelle la fonction peut être un peu bêta). Cela peut être par simple précaution avec un assert().
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Oui, retire les malloc de ta fonction dilation_t(), ils ne te servent à rien puisque la mémoire est déjà allouée automatiquement pour tes tableaux dans le main (et, comme le dit LittleWhite, outre le fait que tu ne libères pas la mémoire, l'allocation écrase le pointeur existant).
Pour le warning, en fait, la fonction affichage() a un prototype void *, ce qui voudrait dire qu'il faut qu'elle retourne un pointeur générique void. Cependant, cela n'a pas de sens dans la fonction en question, qui se contente d'afficher les valeurs du tableau. Du coup, il y a de fortes chances que ce soit une erreur de prototype, l'étoile étant en trop dans la définition de la fonction affichage, et la fonction ne devant, en réalité, rien retourner (void).
Sinon, c'est un peu bizarre d'aplatir les tableaux bidimensionels, et, en même temps, d'en parcourir les valeurs avec deux boucles for... cela rend l'effort du passage de 2D à 1D un peu vain.
Sur 170 lignes de code, il n'y en a que 30 d'utiles pour les 3 fonctions, les autres fonctions n'étant pas appelées ... si elles te sont vraiment utile, tu as des changements du même type à faire sur ces fonctions et d'autres erreurs aussi. Si c'est juste du code mort, retire le, on y verra plus clair :-)
Un type double, plutôt que float, pour des calculs avec virgule flottante, serait préférable sauf à avoir une bonne raison.
Eks
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager