Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1737 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  dbgheap.c erreur assert

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

dbgheap.c erreur assert

n°1049870
said01
Posté le 16-04-2005 à 20:52:57  profilanswer
 

Bj tout le monde,
 
je vais essayer d'être clair mais ce n'est pas evident pour moi.
 
Voilà:
 
je travaille sous xp et VS C++ 6.
 
j'ai 1 appli qui ressemble à l'explorateur de Windows(fonctionalité basic...) .
 
AppWizard m'a enfait généré une SDI avec 1 CLeftView (CTreeView) et 1 CRightView(CListView).
Pour le moment la LeftView affiche tous les disk et rep de mon Pc et RightView affiche les Rep et Fich.. correspondants à l'élément sélectionné ds la TreeView.
 
Ensuite j'ai une CToolBar comme barre d'adresse qui contient une CComboBoxEx. Celle-ci étant synchronisée avec la TreeView comme dans Explorateur Win.  
 
Comme je souhaite implementer le Drag&Dropp sur ma treeView, je crée dans ma LeftView une Variable COleDropTarget m_dropTarget pour ensuite lancer m_dropTarget.Register(this); dans le OnCreate et c'est là ou mon problème commence.
 
j'ai le message d'erreur suivant dés le 1er affichage de ma fenêtre
 

Debug Assertion Failed
Dbgheap.c Line 1017 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

 
Si je commente la variable COleDropTarget je n'ai plus d'erreur.
 
La partie du code que je soupsonne concerne la synchronisation de la comboBox.
 
Détail  
(mon algo n'est peut être pas le mieux qu'on puisse faire... désolé)
 
Pour synchroniser la Combo avec la TreeView. je procede en 2 étapes:
 
Etape 1:
Lors du 1er affichage de ma sdi, je sauvegarde les éléments de la combo ds un Vector.Celui-ci contient des ptr* sur des structures COMBOBOXEXITEM cbi( Ouf...).
 
Voici un exemple d'affichage de la combo et de la treeView  
Exemple de la treeView                     Exemple de la Combo
 
Poste de travail                           Poste de travail
c:\                                        c:\
D:\                                        D:\
E:\                                        E:\
etc...
 
le Code de sauvegarde de la combo:

Code :
  1. COMBOBOXEXITEM* pCBItem;
  2. CString * strAdresse2 ;
  3. //Boucle pr recup des entrées de la combo
  4. for(int v = 0; v < m_pCombBoxEx->GetCount(); v++)
  5. {
  6.      pCBItem = new COMBOBOXEXITEM;
  7.      pCBItem->mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE |
  8.                     CBEIF_OVERLAY | CBEIF_INDENT;
  9.      pCBItem->iItem = v;
  10.      strAdresse2 = new CString ;
  11.      pCBItem->pszText =  (LPTSTR)(LPCTSTR)strAdresse2;
  12.      //pCBItem->pszText =  (LPTSTR)(LPCTSTR)strAdresse2;
  13.      pCBItem->cchTextMax = 256;
  14.      m_pCombBoxEx->GetItem(pCBItem);
  15.      strItemComboVectSov.push_back(pCBItem);
  16. }


 
Etape 2:
Ensuite pour afficher dans la combo le rep développé ds la treeView j'interviens
dans lévénement OnSelchanged de cette dernière où je copies mon vectorSov(que je ne modifies jamais) dans 1 autre Vector tompon qui lui integrera les nouveaux éléments à afficher à chaque fois que l'événement se produit.
 
Exemple de la treeView                     Exemple de la Combo
 
Poste de travail                           Poste de travail
c:\                                        c:\
   Rep1                                       Rep3
   Rep2                                         SsRep3
   Rep3                                    D:\
      SsRep1                               E:\                              
      SsRep2                                
      SsRep3
   Rep4
   Rep5
D:\
E:\
 
j'effectue bien le delete de mon Vector  tompon.
 
Est-ce que quelqu'un pourrait m'éclairer SVP ?
 

mood
Publicité
Posté le 16-04-2005 à 20:52:57  profilanswer
 

n°1049972
SquiZZ
Posté le 16-04-2005 à 23:59:54  profilanswer
 

said01 a écrit :


     strAdresse2 = new CString ;
 
     pCBItem->pszText =  (LPTSTR)(LPCTSTR)strAdresse2;
 
[/cpp]


 
hum, deux casts violents de suite, ca me fait un peu peur.
A mon avis ca marcherait mieux si tu faisais  

Code :
  1. char *ptBuffer = new char[256];
  2. pCBItem->pszText =  ptBuffer ;


 
bon ca fait allouer 256 caractères pour chaque entrée mais si tu veux vraiment stocker des COMBOBOXEXITEM dans ton vector y a pas trop le choix a mon avis.
 
tu pourrais faire comme ca :

Code :
  1. CString ficelle;
  2. pCBItem->pszText =  ficelle.GetBuffer(256);
  3. pCBItem->cchTextMax = 256;
  4. m_pCombBoxEx->GetItem(pCBItem);
  5. ficelle.ReleaseBuffer();


 
mais la variable ficelle va être détruite a la fin du bloc d'instructions et pszText va pointer n'ilmporte quoi.
 
Une meilleure solution serait de te faire une structure qui contient les infos qui sont vraiment interressantes (dont le nom que tu veux récupérer) et faire un vector avec cette structure.
 
pourquoi tu te fait un vector de pointeurs de COMBOBOXEXITEM et pas un vector de COMBOBOXEXITEM ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  dbgheap.c erreur assert

 

Sujets relatifs
erreur acces refuse javascript[JS] Quelle est l'erreur sur ma page ?
[Mysql] Erreur avec des fichiers .ibdErreur aléatoire sur un include
Erreur de syntaxe adodb.recordseterreur dans un script mais pas en ligne de commande ??
erreur a la compilation comprend pas ??Erreur de syntaxe
Erreur : "L'assistant ne sait pas créer votre état." Access 2003[Résolu] Problème ASP/SQL: erreur dans la requête
Plus de sujets relatifs à : dbgheap.c erreur assert


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR