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 :

pb de delete


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Par défaut pb de delete
    bonjour,

    j'utilise Microsoft Visual Studio .Net 2003 (C++)

    voici mon pb
    j'ai des structures genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct _vdpoint_ {
      int x, y ;
    } VdPoint ;
    quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VdPoint *ptArray = new VdPoint[iCountPts] ;
    delete [] ptArray;
    le prg se plante au nivreau du delete
    (msg d'erreur pb dans dbgdel.cpp
    expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
    )
    cependant avec malloc et free ça marche
    !!!???
    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    tu ferais pas un delete sur une zone mémoire non allouée par hasard ?
    es tu sur que ton new a bien marche ?

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Avant de commencer, pourrait-on attirer ton attention sur (le # en haut du formulaire) et te demander d'éditer ton message original en ce sens

    Cela facilitera la vie de tout le monde

    Ensuite, il faut savoir que, en C++, la déclaration d'une structure crée d'office un type correspondant au nom de la strucutre, et que le typedef n'est donc pas nécessaire...

    ton code peut donc parfaitement devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct VdPoint 
    {
        int x;
        int y;
    };
    et je ne sais pas comment réagit VC++ face au déclaration de structure et de type "C style"

    En outre, je voudrais attirer ton attention sur le fait qu'il existe une classe, dans l'espace de nommage std, qui remplace tres avantageusement la création dynamique de tableaux "C style": la classe vector qui s'utilise selon le principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <vector>
    (...)
    //possibilité 1
        std::vector<VdPoint> Array;
    //possibilité 2
        using namespace std;
        vector<VdPoint Array;
    //ajouter un élément
        VdPoint toadd;
        Array.push_back(toadd);
    mais qui réagit exactement comme les tableaux C style à l'utilisation de l'opérateur []...
    [/CODE]
    Enfin, la partie de code que tu présente semble bonne... Les deux possibilités que je voie sont le fait que tu essaye de compiler en C ou le fait que l'erreur se loge ailleurs dans le code.

    L'idéal, quand tu présente une erreur, c'est de nous fournir un code minimum compilable qui nous permette de recréer l'erreur chez nous
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Par défaut
    merci et je m’excuse de ne pas avoir utilisé les balises pour le code

    Le pb est que je dois faire une lib en réutilisant un code dont les structures sont définies dans un "C style"
    Et dont les fonctions prennent en paramètres des tableaux définis comme etant Type* (donc je ne peux pas utilisé la classe std::vector )
    J’ai essayé de reproduire l’erreur en faisant dans un petit main le même code mais ça a bien marché alors que ça ce plante dans ma lib quand on l’utilise.
    !!!???

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par nada114
    merci et je m’excuse de ne pas avoir utilisé les balises pour le code
    Ce n'est pas grave du tout, d'autant plus que laurent a gentillement modifié ton message

    Je ne voulais absolument pas t'agresser en te faisant la remarque, et, si c'est le cas, je t'en présente mes excuses les plus plates
    Citation Envoyé par nada114
    Le pb est que je dois faire une lib en réutilisant un code dont les structures sont définies dans un "C style"
    Et dont les fonctions prennent en paramètres des tableaux définis comme etant Type* (donc je ne peux pas utilisé la classe std::vector )
    J’ai essayé de reproduire l’erreur en faisant dans un petit main le même code mais ça a bien marché alors que ça ce plante dans ma lib quand on l’utilise.
    !!!???
    peut etre la solution est-elle d'entourer la déclaration de ta structure d'un extern C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    extern C
    {
    typedef struct _vdpoint_ {
      int x, y ;
    } VdPoint ;
    }
    (les bibliotheques et moi ...)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 23
    Par défaut la cause du pb
    Salut,

    enfin j'ai trouvé la cause:
    au niveau du setting de l'application qui appele la lib, il faut mettre YES pour Ignore All Default Libraries

    Merci
    @++

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour moi, c'est une fausse solution au problème.

    Le problème est un conflit de type d'allocation (malloc() contre new[]), pas un problème de choix de bibliothèque.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02
  2. delete en cascade
    Par bruno270579 dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/12/2003, 17h17
  3. fonction postgresql qui delete un enr
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/11/2003, 14h44
  4. [requête] DELETE + SELECT
    Par doohan dans le forum Requêtes
    Réponses: 6
    Dernier message: 07/07/2003, 12h27
  5. [langage] delete de fichier
    Par lolive dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2003, 15h04

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