Petite enigme...

lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007 - 4 janv. 2006 à 09:57
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 4 janv. 2006 à 11:24
Bonjour a tous alors j'ai une petite enigme si quelqu'un pense connaitre la raison d'un plantage miraculeux... alors pour faire simple je transforme un tableau de BYTE en CString avec la fonction suivante :

void MDBConvert_OTC(const BYTE *chaine, int longueur, CString &rep,CString &reponse)
{
_TCHAR Tmp;

for (int k=0;k<longueur;k=k+2)
{
Tmp = chaine[k] + ((chaine[k+1])<<8);
reponse += Tmp + " "; <= la ca marche
rep += Tmp; <= la ca plante
}
}

sur la 2e affectation j'ai une erreur d'assertion dans une MFC :

void PASCAL CString::Release(CStringData* pData)
{
if (pData != _afxDataNil)
{
ASSERT(pData->nRefs != 0); <= la ca plante
if (InterlockedDecrement(&pData->nRefs) <= 0)
FreeData(pData);
}
}

4 réponses

CoyoteVsBeepBeep Messages postés 41 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 3 mars 2006
4 janv. 2006 à 10:23
hello,
dans ta fonction void MDBConvert_OTC(const BYTE *chaine, int longueur, CString &rep,CString &reponse)

rep et reponse sont des pointeurs sur des object CString.

lorsque tu fais:
reponse += Tmp + " ";
rep += Tmp;

tu modifis l'adresse de ta chaine de caracteres et non pas sont contenu.

essai

*response=*response+Tmp;
*rep=*rep+Tmp;
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
4 janv. 2006 à 10:37
CoyoteVSBeepBeep> Ce ne sont pas des pointeurs, mais des références.

lamoueste> As tu bien penser à instancier tes deux objets CString que tu passes en paramètres?

Shell
0
lamoueste Messages postés 76 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 3 juillet 2007
4 janv. 2006 à 11:16
Instancier ? tu entend quoi par la exactement ?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
4 janv. 2006 à 11:24
Quand tu utilises des objets, il faut les instancier.
Dans le cas de pointeur il ne doit pas etre nulle.

Exemple :

CString * maString;

maString = new CString("Toto");
...
delete maString;

Shell
0
Rejoignez-nous