Salut à tous, comme l'indique le sujet, j'essaie de remplir un tableau (tout bête me direz vous) et pis ben ça ne marche pas !
Contexte : C++ natif, avec MFC donc sous VS2005
Plateforme solution : Windows Mobile 2005 Emulateur
Je possède un tableau de chaines, chaque chaine étant composée de sous chaines séparées par des ;
comme ceci :
L1 aaaaa;bbbbbbbbb;cccccccccc;dddddddddd;
L2 eeeeeeeee;fffffffffff;gggggggggg;hhhhhhhh;
L3 etc...le but étant de stocker tout ça dans un autre tableau qui sépare chaque sous chaine pour plus de confort.
C1 C2 C3 etc...
L1 aaaaa bbbb ccccc
L2 eeeee ffff ggggg
etc...
Voici le code en cause : m_strTabDBLine est un char ***, m_strTabBuffer un char ** et m_uiNbLignes un UINT
char * pctmp, ctmp[100]={0};
int k=0;
m_strTabDBLine = new char ** [m_uiNbLignes]; // alloue les lignes
for (UINT i=0;i<m_uiNbLignes;i++)
{
m_strTabDBLine[i] = new char * [nbfields]; // alloue le nombre de champs par ligne
pctmp = m_strTabBuffer[i]; // fixe le pointeur en début de ligne
for (int j=0;j<nbfields;j++)
{
k=0;
while(pctmp[k] != ';')
ctmp[k] = pctmp[k++]; // récupère chaque caractère entre deux ;
ctmp[k] = '\0';
m_strTabDBLine[i][j] = new char [strlen(ctmp)]; //initialise le champ à la bonne taille
strcpy(m_strTabDBLine[i][j],ctmp); // le remplit avec la chaine
pctmp = strstr(pctmp,";")+1; // saute jusqu'au prochain champ
}
}
Si je structure le tableau m_strTabBuffer, dans mon exemple, il contient ces caractères :
Nom;Prenom;Adresse;Code Postal;Ville;Pays;
// valeurs
nom01;prenom01;adresse01;CP01;ville01;pays01;
nom02;prenom02;adresse02;CP02;ville02;pays02;
etc...
J'ai noté le moment du bug avec la couleur et la mise en gras souligné.
Je trace donc l'exécution du programme et au début tout va bien. Je vérifie les valeurs de mes variables tout se passe nickel.
Mais ensuite, lorsque le curseur atteint cette ligne, je fais F11 pour avancer en pas à pas et ça plante en me mettant ce message :
Unhandled exception at 0x03f8103c in OpenDB3.exe: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00299008.
et ça m'ouvre une page de code plex.cpp situé dans un dossier mfc de visual studio avec un curseur vert à l'endroit où j'ai mis ma flèche :
CPlex* PASCAL CPlex::Create(CPlex*& pHead, UINT_PTR nMax, UINT_PTR cbElement)
{
ASSERT(nMax > 0 && cbElement > 0);
if (nMax == 0 || cbElement == 0)
{
AfxThrowInvalidArgException();
}
==> CPlex* p = (CPlex*) new BYTE[sizeof(CPlex) + nMax * cbElement];
// may throw exception
p->pNext = pHead;
pHead = p; // change head (adds in reverse order for simplicity)
return p;
}
Mes questions sont donc :
- Savez vous pourquoi ça bug ?
- Savez vous pourquoi ça ne bug pas avant ??? 
question subsidiaire
- Ai-je choisi le bon thème ?
Merci à toutes les bonnes âmes qui liront ce message et peut-être me répondront ! 
Loki