cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 3 juil. 2007 à 20:40
Escuse erreur de ma part j'ai voulu marquer mastruct.tab new char[100]; et non mastruct.tab new * char[100]; qui est totalement faux...
Donc ceci ne fonctionne pas ^^
Merci pour ta réponse
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 4 juil. 2007 à 17:28
Salut,
Ben comme je l'est dit c'est pour mettre dans un recv() de socket...
j'ai essayer avec malloc mais meme probleme lors de la reception d'un message recv retourne -1 car en réalité il n'a pu ecrire dans le buffer que je lui est passé :(
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 5 juil. 2007 à 09:41
Salut,
(Ce que je vais dire est soumis à caution, et est basé plus sur le Delphi que sur le C)
Quand tu déclare ça :
struct test{
int var1;
char * tab;
}
Ca fait quelle taille ? A priori 8 octets : les 4 de l'int plus les 4 du pointeur. Tu peux vérifier avec sizeof.
Maintenant si tu fait un mastruct.tab = new char[100];
Tu alloue 100 octets (En MBC, en unicode, ça fait peut être le double).
Si tu refait un sizeof, tu tomberas pourtant toujours sur 8. Les 100 octets ont été alloués quelque part dans le tas et sont pointés par les 4 derniers octets de ta structure.
Si tu fait :
macopiedestruct = mastruct;
Cela fait une copie de 8 octet... macopiedestruct .tab pointe alors sur le MEME tableau que mastruct.tab.
Donc toute modification appliquées à macopiedestruct .tab sera répercutée sur mastruct.tab.
Partant de cette état de fait, lors de ta transmission de ta structure à ta socket, il faut que tu fasse un peu de code pour gérer le passage correctement. Il faut que tu commence par passer les 4 octets de var1, puis les 100 octets de tab. A la réception, il faut que tu copie le var1 qui arrive dans le var1 d'une structure, et que tu récupère les 100 octets dans un tableau, et que tu fasse pointer le pointeur de ta structure sur ce tableau.
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 5 juil. 2007 à 17:51
Salut,
Je te remercie de ta réponse, se que tu à dit au début je le savais puisque effectivement j'avais fait un sizeof pour voir la taille ^^ et effectivement tu à raison ça fait 8 octets.
Bon bah vu qu'apriori on ne peu faire de stucture dynamique ^^ je vais essayé de passer par un autre moyen c'est dommage quand même.