IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

opération de matrice avec fonction et pointeur


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut opération de matrice avec fonction et pointeur
    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
    Fichiers attachés Fichiers attachés
    • Type de fichier : c TP1.c (2,3 Ko, 48 affichages)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    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).
    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]
    }
    Veuillez donc prendre en compte l'avertissement et faire en sorte que votre outil de compilation active les avertissements.

    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().
    Fichiers attachés Fichiers attachés
    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.

  3. #3
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    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

Discussions similaires

  1. Transposer une matrice avec fonctions, pointeurs
    Par bpascal123 dans le forum Débuter
    Réponses: 5
    Dernier message: 06/04/2010, 09h55
  2. Réponses: 11
    Dernier message: 07/01/2008, 19h47
  3. pointeur avec fonctions
    Par freeman43 dans le forum C
    Réponses: 10
    Dernier message: 05/05/2007, 18h49
  4. Réponses: 8
    Dernier message: 10/03/2006, 17h28
  5. Réponses: 17
    Dernier message: 24/03/2005, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo