Struct dynamique est ce possible ?

cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 3 juil. 2007 à 20:16
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 5 juil. 2007 à 17:51
Bonjour à tous,

Voici ce que je veu faire :

struct test{
    int var1;
    char * tab;
}

//Dans mon code
test mastruct;
mastruct.tab = new char * [100]; // Sachant que biensure sa peu etre 100 comme 1000 ...

Ceci ne marche pas quand je passe en paramétre ma structure dans un recv() le recv retourne -1 :( par contre si je marque comme ceci:

struct test{

    int var1;

    char tab[100];

}

La le recv() marche mais ce n'est plus dynamique.

Quelqu'un à une idée pour rentre le tableau qui est dans ma structure dynamique ?
Merci d'avance

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juil. 2007 à 20:38
mastruct.tab = new char[100];



ciao...
BruNews, MVP VC++
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Derniè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
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
3 juil. 2007 à 23:10
Personne n'a d'autre idée ? :(
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 juil. 2007 à 23:33
faut voir ce que tu en fais de ta structure mais sinon c'est bon au niveau allocation.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Derniè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é :(

Tu n'aurais pas une idée ? ruse ou autre ^^
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
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.
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Derniè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.
0
Rejoignez-nous