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 :

pointeur new delete


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut pointeur new delete
    Bonjour a tous,

    le code ci-dessous se compile sans probleme, par contre genere une errur de "segmentation fault" quand je l'excute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int N=10000;
    float* A=new[N];
    for (int i=0; i<N;i++)
    {A[i]=1};
    finction_save_infile(A);
     
    delete [] A;
    Cette erreur disprait quand j'ajoute la ligne

    juste avant delete (en ligne 7)

    j'ai les questions suivantes:
    - pourquoi ca genere une erreur de segmentation ?
    - je ne comprends pas pourquoi ajoute cette ligne ca fait disparaitre l'erreur!
    - est que je dois faire confiance au resultat obtenu par ce programme ?

    Merci de votre aide

  2. #2
    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
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float* A=new float [N];
    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
    .

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut
    oui j'ai fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float* A=new float [N];
    mais l'erreur de segmentation persiste.

    J'ai essaye de re-excute le programme, maintenent meme avec A=NULL ca genere une erreur de segmentation a l'excution ?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Je suppose que c'est une erreur de frappe :
    A part cela, le code est "correcte" (sauf que sans raison particulière, utilise plutôt un std::vector à la place d'un tableau comme tu fais). Le problème doit venir de ta fonction finction_save_infile

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 243
    Par défaut
    Ou bien le code que tu nous montres n'est pas celui qui plante.

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Que fait finction_save_infile() ?

    Pourrais-tu fournir un code minimal mais compilable qui reproduit le problème ?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int N=10000;
    std::vector<float> A(N,1);
    finction_save_infile(A);
    les pointeurs bruts (new/delete), ça montre ceux qui ne savent pas développer en C++

    Ceci dit,
    Citation Envoyé par loisir1976 Voir le message
    - pourquoi ca genere une erreur de segmentation ?
    Très concrètement, parce que tu débordes probablement au delà de l'espace réservé lors du new[].
    Citation Envoyé par loisir1976 Voir le message
    - je ne comprends pas pourquoi ajoute cette ligne ca fait disparaitre l'erreur!
    Car tu ne supprimes plus l'espace mémoire alloué. Du coup, c'est juste de la chance que le problème ne se révèle pas à cet endroit. Mais cela risque de planter ailleurs de façon assez incompréhensible. En plus, tu génères une fuite mémoire.

    Citation Envoyé par loisir1976 Voir le message
    - est que je dois faire confiance au resultat obtenu par ce programme ?
    Non.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par loisir1976 Voir le message
    Cette erreur disprait quand j'ajoute la ligne

    juste avant delete (en ligne 7)
    Ben déjà, l'affectation à NULL doit avoir lieu après la libération des ressources, dont après le delete.

Discussions similaires

  1. Pointeur et delete
    Par syn42 dans le forum SL & STL
    Réponses: 3
    Dernier message: 12/09/2007, 09h13
  2. Réponses: 3
    Dernier message: 04/12/2006, 15h19
  3. tableau de pointeurs et new, delete
    Par luckydigit dans le forum C++
    Réponses: 12
    Dernier message: 21/07/2006, 11h24
  4. [Débutant]Constructeur et new/delete
    Par Geolem dans le forum C++
    Réponses: 5
    Dernier message: 02/12/2005, 21h11
  5. Namespace et surcharge operator new/delete
    Par ZeLegolas dans le forum C++
    Réponses: 11
    Dernier message: 26/07/2005, 13h55

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