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 :

Erreur fuite mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut Erreur fuite mémoire
    Bonjour

    j'aurai voulu savoir si vous connaissez à quoi est due cette erreur:
    *** glibc detected *** double free or corruption (!prev): 0x08050158 ***

    Je travaille avec des vecteurs, j'ai un vecteur qui s'appelle x, et voila les valeurs qu'il prend

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [-1 , -0.95 , -0.9 , -0.85 , -0.8 , -0.75 , -0.7 , -0.65 , -0.6 , -0.55 , -0.5 , -0.45 , -0.4 , -0.35 , -0.3 , -0.25 , -0.2 , -0.15 , -0.1 , -0.05 , 3.19189e-16 , 0.05 , 0.1 , 0.15 , 0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1]
     
    [-1 , -0.95 , -0.9 , -0.85 , -0.8 , -0.75 , -0.7 , -0.65 , -0.6 , -0.55 , -0.5 , -0.45 , -0.4 , -0.35 , -0.3 , -0.25 , -0.2 , -0.15 , -0.1 , -0.05 , 3.19189e-16 , 0.05 , 0.1 , 0.15 , 0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1]
     
    [11.7597 , -0.95 , -0.9 , -0.85 , -0.8 , -0.75 , -0.7 , -0.65 , -0.6 , -0.55 , -0.5 , -0.45 , -0.4 , -0.35 , -0.3 , -0.25 , -0.2 , -0.15 , -0.1 , -0.05 , 3.19189e-16 , 0.05 , 0.1 , 0.15 , 0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1]
    Vous remarquerez ques le -1 à changé de valeur,
    le 0 aussi en fait, mais si je trouve pourquoi le -1 a changé, je le saurai pour le 0 aussi
    et voila le bout de code qui en est responsable


    !!!!! x c'est disd[0]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cout<<x<<endl;  // ca passe
     
     AA[0][comp]  = ones0;
     AA[1][comp]  = pow(disd[1],2)-1;
     comp++;
     cout<<x<<endl; // ca passe
     
      AA[0][comp]  = pow(disd[0],2)-1;
      AA[1][comp]  = 2.;
     comp++;
     cout<<x<<endl; // ca passe plus
     AA[0][comp] = 6*disd[0];
    au cas ou, la fonction pow c'est ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Vector<double> pow( Vector<double> x,int pp)
    {
     
          int s=x.size();
          Vector<double> x2(s);
          for (int i=0;i<s;i++)
            x2[i]=pow(x[i],pp);
          return x2;
     
    }


    à quoi est due cette erreur svp, merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Bon,

    Je viens de me rendre compte, que à chaque fois que je passe un vecteur en paramètre à une fonction, il ya une valeur qui change, par contre je n'ai aucune idée de la raison, j'attend vos conseils

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut
    Salut,

    je comprend pas très bien. Si x c'est disd[0], pourquoi utilise-tu tantot x(pour le cout), tantot disd[0] (pour ta fonction pow). Qu'est-ce qui relie les deux dans ton programme ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Rien en fait, x c'était juste pour expliquer mon problème, il n'existe pas dans le programme.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AA[0][comp]  = pow(disd[0],2)-1;
      AA[1][comp]  = 2.;


    La première ligne renvoie un vector<double> et la seconde c'est quoi?
    Qu'est-ce que AA? Un tableau à 2 dimensions de vector<double>? Pourquoi y a-t-il une majuscule à Vector? Qu'est-ce que c'est que cette classe?

    Ton code est vraiment difficile à déchiffrer, tu ne fournis pas assez de détails.

    Sinon, un conseil très important:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<double> pow( Vector<double> x,int pp)
    remplace par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<double> pow( Vector<double> & x,int pp)
    qui évite la copie de ton vecteur. Et même mieux, puisque ton vecteur n'ests pas modifié par ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<double> pow( const Vector<double> & x,int pp)
    ce qui permet au compilateur d'optimiser mieux et qui améliore grandement la sémantique de ton code.

    Hope it helps.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Bonjour

    Oui AA, c'est un tableau de Vector, et c'est une classe de la librairie sparselib

    http://www.ing.unitn.it/~bertolaz/so.../sparselib.php

    En fait, si je fais tout ca, c'est que j'ai besoin d'une librairie qui gère les matrices creuses, les matrices normales, et les vecteurs normaux, en plus, il faut que les classes des matrices et des vecteurs soient dyamiques pour pouvoir agrandir les matrices durant le programme, et j'ai aussi besoin que ces classes, gèrent les opérations basiques comme la transposé, multiplication vecteur par matrice .....

    Edit: je rajoute que j'ai toujours pas trouvé, de librairie qui gère la multiplication de deux elements de la classe vector pour obtenir un élément de la classe matrice

    Ca fait beaucoup non, en plus je n'ai vraiment pas le temps, de programmer tout ca moi même.

    Voila tout, et sinon le const, je l'ai rajouté, mais bizarrement ca continue à changer de valeurs.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur: Fuite Mémoire?
    Par Schoubi dans le forum Général Java
    Réponses: 8
    Dernier message: 04/05/2010, 09h30
  2. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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