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++/CLI Discussion :

Delete[] d'un tableau non managé


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut Delete[] d'un tableau non managé
    Bonjour à tous.

    Je travaille sur une application constitué d'une IHM C# qui appelle des librairies C++ natif. Le passage de l'un à l'autre se fait en Wrappant la classe C++ natif par une classe C++ managé.

    La classe C++ natif contient un tableau d'entiers qui est instanciée par l'opérateur new int[].

    Lorsque, plus tard dans le traitement, le tableau est désaloué j'utilise l'opérateur delete[]. L'aplication plante à ce moment en renvoyant l'erreur suivante :

    _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
    ce qui signifie que l'objet que je cherche à désalouer n'est pas dans le tas courant! Je ne comprend pas pourquoi.

    Si vous avez une idée merci.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu le désalloues dans une partie de code managée ? ou toujours dans ta classe native ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    L'allocation et la destruction se font tous les deux dans la classe native.

    J'ai simplifié le problème en faisant le test suivant

    - La classe pointe donc sur une classe C++ natif
    - puis on appel le constructeur de la classe native ;
    - dans ce constructeur :
    - j'alloue un tableau d'entier avec new int[200];
    - immédiatement après je désalloue avec delete[]
    ==> une erreur se produit

    Par curiosité, si j'utilise un "delete" simple, ca passe à l'exécution. Dans le débugger on voit bien la zone mémoire qui correspond au tableau qui se "réinitialise" à se moment là ???

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    d'après la norme c++,
    si tu fais un delete sur un tableau [] , le comportement est indéfini

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 24
    Par défaut
    Hélas, je le sais bien.

    J'aimerai savoir si quelqu'un à déjà été dans cette configuration (new[]/delete[] dans une classe native) sans renconter aucun problème? Merci pour vos témoignage.

Discussions similaires

  1. Recherche élément médian dans tableau non trié
    Par chicorico dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2009, 17h39
  2. C# et Dll non managé : passage de tableau de caractère
    Par devajax13 dans le forum C++/CLI
    Réponses: 4
    Dernier message: 11/03/2008, 20h13
  3. Réponses: 4
    Dernier message: 13/06/2004, 15h28
  4. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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