Problème tableau structure

[Résolu]
Signaler
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour à tous,



J'ai un petit problème avec mon tableau de structure.



Voici ma structure dans mon .h :



typedef struct {



      CString Pays;

      CString Ville;

      CString Rue;

      CString NumRue;

      CString CP;

      CString ID;


}STRUCT_INFOS ;






et dans mon .cpp j'ai :



STRUCT_INFOS *pstruct_INFOS = NULL;



pstruct_INFOS = (STRUCT_INFOS *)malloc(1000 * sizeof(STRUCT_INFOS));



if(pstruct_INFOS == NULL ) AfxMessageBox("pb malloc structure");








-- et dans une boucle j'ai



pstructAF_INFOS[i].ID = "test"; // i étant incrémenté à chaque passage




 



mais voila cela ne marche pas et j'ai comme erreur :



Exception non gérée à 0x7c176d5c (mfc71d.dll) dans MonProjet.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcdcdcdc9.



Pouvez-vous m'aider ??



Merci d'avance

10 réponses

Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012

Avant, dès la 1ère fois.

Quand je remplace CString dans ma structure par un char ID[5] par exemple et dans mon .cpp si je fait un strcpy(pstruct_INFOS[i].ID , "test") là ca marche alors pourquoi cela ne marche pas avec les CString, si quelqu'un pouvait m'expliquer le problème.
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012

J'ai oublié de préciser que je dois faire un malloc pour l'allocation car dans ma boucle quand i à atteint 1000 je dois faire un réalloc de 1000 en plus.
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Salut,
Ca plante quand i atteint 1000? ou avant?

Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Pourquoi veut tu utiliser les CString?

Neo_Fr
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012

On ma conseillé de les utiliser pour plus de simplicité parait-il   (cela ne fait pas longtemps que j'ai débuté le C++ alors je sais pas trop) enfin sinon j'ai gardé mes char et mon strcpy qui marche très bien mais maintenant j'aurais une autre question.

La j'ai rempli mon tableau de structure mais plus tard dans une autre fonction je dois récupérer ces informations mais je n'y arrive pas, j'ai testé en donnant l'adresse de mon pointeur de ma structure mais cela ne marche pas, quelqu'un sait ??

Merci d'avance
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Remplace le . par ->
Ex:
void __stdcall ShowID(STRUCT_INFOS* psInfos)
{
MessageBox(0, psInfos->ID, 0, 0x40);
}

Neo_Fr
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012

J'ai trouvé, en fait j'avais laissé le free(...) avant de lire ma structure alors c'est sur que ça pouvait pas marcher ^^ .

Merci quand même.

Bonne soirée.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,

Une structure avec des CString faut l'allouer obligatoirement avec new
et surtout pas avec malloc, sinon les constructeurs des CString seront
jamais appelés.
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012

Ahh ok je comprend mieux mtn :)
Merci bien
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
C'est valable pour toute classe, que soit CString ou autre, toujours new et jamais de malloc.

ciao...
BruNews, MVP VC++