Voilà le principe :
A la fin de InitInstance(), j'ai :
Sachant que j'ai déclaré ma liste de caméras dans CMyProjectDoc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CDocument *pDoc=NULL; CMDIFrameWnd* pMDI=static_cast<CMDIFrameWnd*>(AfxGetMainWnd())->GetActiveFrame(); if(pMDI) pDoc=pMDI->GetActiveDocument(); pDoc->ListCamera(); pDoc->GetConnectedCam(); delete pFrame; delete pDoc;
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 //dans MyProjectDoc.h : public: typedef CList <CCamera*, CCamera*> CCameraList; CCameraList m_CCameraList; //variable de type CCameraList; void ListCamera(void); //pour remplir la liste //dans MyProjectDoc.cpp : void CMyProjectDoc::ListCamera(void) { CCamera1* pCamera1 = new CCamera1; m_CCameraList.AddHead(pCamera1); // C'est ici que se situe le problème CCamera2* pCamera2 = new CCamera2; m_CCameraList.AddHead(pCamera2); }
Voilà le problème maintenant :
je suis le parcours du programme en mode debug :
il commence par s'attaque à cette ligne CDocument *pDoc=NULL;
il va donc dans document et rentre directement dans ListCamera() d'ailleurs, allez savoir pourquoi.
Bref, il voit un pointeur et donc rentre dans CCamera1.
Quand il revient, il doit donc s'attaquer à AddHead mais là, ASSERT FAILURE!
Voilà sur quoi j'atteri (fichier afxtempl.h):
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 template<class TYPE, class ARG_TYPE> POSITION CList<TYPE, ARG_TYPE>::AddHead(ARG_TYPE newElement) { ASSERT_VALID(this); CNode* pNewNode = NewNode(NULL, m_pNodeHead); pNewNode->data = newElement; if (m_pNodeHead != NULL) m_pNodeHead->pPrev = pNewNode; else m_pNodeTail = pNewNode; m_pNodeHead = pNewNode; return (POSITION) pNewNode; }
Vous voyez le problème?
Partager