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 :

Passage en pointeurs assez délicat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut Passage en pointeurs assez délicat
    J'ai un code qui met en jeu des struct matrice. J'ai des soucis de fuites mémoires qui après plusieurs heures de tâtonnement, me paraissent impossible à résoudre. On m'a donc conseillé de passer les arguments de mes fonctions et les return en "matrice*" au lieu de "matrice" pr optimiser la gestion de la mémoire.

    Après la conversion, j'ai des erreurs ZPW ac purify, 2 exactement, d'après le manuel, ça arrive lors de l'échec du return d'une fonction censée retourner un pointeur. Notamment, quand la fonction veut retourner un pointeur NULL.

    Sauf que la fonction qui génère cette erreur ne retourne rien!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void initialiser_matrice(matrice *m){
    	m=NULL;
    	m->largeur=0;   /*ligne qui génère l'erreur*/
    	m->hauteur=0;
    }
    avec la structure matrice définit ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
        int** coeff;
        int largeur;
        int hauteur;
    } matrice;
    Des idées??

    Merci

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    bizarre de faire m=NULL puis m->hauteur= 0 non ? Tu voulais dire sans doute coeff=NULL non ?

  3. #3
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void initialiser_matrice(matrice *m){
    	m=NULL;
    	m->largeur=0;   /*ligne qui génère l'erreur*/
    	m->hauteur=0;
    }
    Tu mets explicitement ton pointeur m a NULL, puis tu le dereferences... Enleves m=NULL et ca devrait deja aller mieux

    Sinon passer les arguments par valeur (matrice) ou par reference (matrice*) n'a aucun rapport avec une fuite memoire. Une fuite memoire c'est un malloc() sans free().

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Citation Envoyé par scarabee10 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void initialiser_matrice(matrice *m){
    	m=NULL;//Gros problème...
    	m->largeur=0;   /*ligne qui génère l'erreur*/
    	m->hauteur=0;
    }
    Je vois pas l'interet de mettre ton pointeur a null car apres tu n'as aucun moyen de recuperer l'adresse de ta structure. De plus c'est normal que cela genere un erreur puisque ton pointeur m est a null donc m->largeur devrait te genere une erreur de segmentation. De meme pour m->hauteu.

    Ton code a un gros problème. Je peux pas t'aider a le resourdre car il faudrait que je sache un peux plus ce qu'il fait.

    Bon courage.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tu reposes la même question qu'ici avec le même problème (et en plus, tu obtiens les même réponses)

    Je pense qu'il serait temps de réfléchir différemment à ton problème en prenant un peu de recul.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut
    Oui je crois que je vais revoir la construction de mon code. Il ya quelque chose qui cloche quelque part.

    J'aurai une dernière question que je vais poster ici pour éviter de spoiler ailleurs.

    J'utilise dans mon code des cos à plusieurs reprises (doubles sommations)! Pour optimiser le temps d'exécution de mon code.. et vu que les fonctions de trigo mettent d'après mon prof un temp de calcul assez long. J'aimerais les remplacer par une autre fonction, je pense notamment au développement en séries entières.

    Merci d'avance,

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Etant donné qu'aujourd'hui, les calculs en virgule flottante sont effectués directement par le co-processeur mathématique, je doute que les re-développer en C rende les calculs plus rapides.
    Par ailleurs, si mes souvenirs d'école (d'il y a 20 ans) ne me font pas défaut, la librairie C pour ces fonctions trigonométriques (comme pour la plupart des fonctions mathématiques) est déjà basé sur les développements limités.
    Encore une fois, il sera difficile de faire plus efficace (à moins de limiter l'ordre du développement limité, et donc de perdre en précision).

Discussions similaires

  1. Passage de pointeurs entre fonctions
    Par mickael.be dans le forum Langage
    Réponses: 3
    Dernier message: 02/01/2006, 21h01
  2. passage de pointeurs entre appli delphi et DLL c++
    Par e-teo dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2005, 21h46
  3. Passage de pointeur en session
    Par goondi dans le forum Langage
    Réponses: 6
    Dernier message: 21/09/2005, 11h54
  4. Problème passage de pointeur
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 21/04/2004, 18h34
  5. [allegro]passage de pointeur sur image
    Par Gonath dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/12/2003, 18h47

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