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

MFC Discussion :

[MFC] Comment déléter un tableau dynamique dans une CDialog [FAQ]


Sujet :

MFC

  1. #1
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut [MFC] Comment déléter un tableau dynamique dans une CDialog
    Bonjour,

    toujours aussi peu doué pour les titres....
    dans une CDialog, j'ai des tableaux déclarés par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    X=new double[NombrePoints];
    je dois bien sûr faire un
    en quittant la boîte de dialogue, mais où ?

    dans le destructeur (mais comment le déclarer ? sachant que le constructeur est )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CAcquisition::CAcquisition(CWnd* pParent /*=NULL*/)
    	: CDialog(CAcquisition::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CAcquisition)
    		// NOTE: the ClassWizard will add member initialization here
    	//}}AFX_DATA_INIT
    }
    ou dans OnDestroy()
    Philippe

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Dans le destructeur de la dialogue.

  3. #3
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Merci de ta réponse, mais ...

    ça plante :
    j'ai les constructeurs et destructeurs suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    CAcquisition::CAcquisition(CWnd* pParent /*=NULL*/)
    	: CDialog(CAcquisition::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CAcquisition)
    		// NOTE: the ClassWizard will add member initialization here
     
    NombrePoints=200;
    Xc=new double[NombrePoints];
    Yc=new double[NombrePoints];
    Zc=new double[NombrePoints];
    T=new double[NombrePoints];	
    donneesIRS=new IRS[NombrePoints];
    rho=new double[NombrePoints];
    theta=new double[NombrePoints];
    phi=new double[NombrePoints];
    Cm=new double[NombrePoints];
    T=new double[NombrePoints];	
     
    	//}}AFX_DATA_INIT
    } //constructeur
     
    CAcquisition::~CAcquisition()
    {
    	//{{AFX_DATA_INIT(CAcquisition)
    		// NOTE: the ClassWizard will add member initialization here
     
     
    delete[] Xc;
    delete[] Yc;
    delete[] Zc;
    delete[] T;	
    delete[] donneesIRS;
    delete[] rho;
    delete[] theta;
    delete[] phi;
    delete[] Cm;
    delete[] T;	
     
     
    	//}}AFX_DATA_INIT
    } //destructeur
    mais lors de la destruction de CAcquisition (par l'application principale qui a fait un new CAcquisition, puis delete CAcquisition),
    j'ai les erreurs suivantes :

    [3532] memory check error at 0x0033D0CC = 0xDD, should be 0xFD.
    [3532] memory check error at 0x0033D0CD = 0xDD, should be 0xFD.
    [3532] memory check error at 0x0033D0CE = 0xDD, should be 0xFD.
    [3532] memory check error at 0x0033D0CF = 0xDD, should be 0xFD.

    Pourquoi ?
    Merci d'avance
    Philippe
    Philippe

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Xc et compagnie sont des variables membres de la classe dialogue ?
    si ça plante dans le destructeur c'est que tu pertubes la memoire quelque part ...
    par exemple en affectant une valeur hors indice du tableau..

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je me permet d'intervenir car j'estime que c'est vraiment très important: il faut utiliser les conteneurs. Si tu utilise la mfc, il y a la classe template CArray.
    - ça t'évitera ce genre de problème (new et delete)
    - ça t'évitera les "sortie de tableau"
    - ces classes sont optimisées
    - ces classes sont stables
    - ces classes sont très simples à utiliser.

    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Bonjour r0d,

    merci de ton intervention qui pourrait me sauver la mise...
    car j'ai ce problème à de multiples endroits, toujours avec des tableaux dynamiques, avec des fuites de mémoire impressionnantes

    je vais tout modifier avec CArray (ça rejoint le conseil le Farscape un peu plus tôt ce matin)

    je repasserai en cas de problème
    merci à vous deux
    Philippe
    Philippe

  7. #7
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    C'est toujours moi ...
    j'ai remplacé mes new/delete par des CArray, c'est parfait ça compile, mais ....

    Soit un tableau Xc définit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public:
    	CArray<double,double&> Xc;
    et initialisé par
    Comment passer ce tableau à une procédure SetDatas (pour affichage des valeurs),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void SetDatas(int nombrePoints, double* tableau) {
    ....
    }
    sachant qu'elle n'accepte que double* comme 2ème argument
    (elle appartient à une bibliothèque, donc je ne peux rien y faire !)

    en l'appelant par SetDatas(n,Xc);
    j'ai l'erreur :
    error C2664: 'void __thiscall CPGLLine2D::SetDatas(int,double *)' : cannot convert parameter 2 from 'class CArray<double,double
    &>' to 'double *'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

    Quel opérateur de conversion faut-il écrire pour passer tout simplement de CArray<double,double &> à double* ?

    Merci d'avance de vos réponses
    Philippe
    Philippe

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ce matin c'est la serie des CArray et compagnie ,

    alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef CArray<double,double&> DoubleArray;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    void SetDatas(int nombrePoints, double * ptableau)
     {
    }
    DoubleArray dArray;
    SetData(..., dArray.GetData( ));

  9. #9
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Farscape, j'ai cherché un smiley qui se prosterne, mais y'a pô !

    alors j'ai pris celui là


    Bluffé, ça marche !!!
    Et puis quand je vois ta réponse de ce matin concernant la CList ....
    alors re

    A bientôt
    Philippe
    Philippe

  10. #10
    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
    Points : 16 075
    Points
    16 075
    Par défaut


    maitre farscape

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

Discussions similaires

  1. [Conception] Insertion de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 12/05/2011, 14h39
  2. Réponses: 1
    Dernier message: 27/05/2008, 11h20
  3. Réponses: 4
    Dernier message: 01/01/2007, 10h26
  4. [SQL] Modification de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/06/2006, 16h55
  5. Réponses: 1
    Dernier message: 23/06/2006, 11h19

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