Voilà le principe :

A la fin de InitInstance(), j'ai :
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;
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
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?