Tableaux de chaines en argument de fonction

ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005 - 29 juil. 2004 à 20:08
ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005 - 29 juil. 2004 à 22:19
je dispose d'une fonction connect a laquelle je doit passer un tableau de chaine char **RegisteredChannels_Name.
Pour cela je déclare mon tableau dans le main ( ) .
24 élements avec un buffer de 50 caractères.
char RegisteredChannels_Name[24][50];

Résultat : Segmentation Fault

J'ai surement fait une faute dans mon code mais je ne la voit pas . Si qqun pouvait m'aider.
Merci d'avance

Ashboody

---------------------------------------------------------------------------------------------------
int Connect(char *Ini_Filename,
int *RegisteredChannels_Indexes,
long *RegisteredChannels_MemoryDepth,
long *RegisteredChannels_Position,
float *RegisteredChannels_ScaleValue,
long *RegisteredChannels_SampleRate,
char **RegisteredChannels_Name,
int *RegisteredChannels_Type,
int *RegisteredChannels);
------------------------------------------------------------------------------------------------

int main (void) {

char RegisteredChannels_Name[NBCHANNELSMAX][50];

Connect(Ini_Filename,
RegisteredChannels_Indexes,
RegisteredChannels_MemoryDepth,
RegisteredChannels_Position,
RegisteredChannels_ScaleValue,
RegisteredChannels_SampleRate,
RegisteredChannels_Name,
RegisteredChannels_Type,
RegisteredChannels)

return 0;
}

16 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 20:12
Un Segmentation Fault signifie que tu depasse les limites de ton tab, en voyant ton code, je ne peux pas t'aider (que fait Connect ?) mais essaye d'agrandir ton tab pour voir si ca change.

++
0
ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005
29 juil. 2004 à 20:35
non en fait un buffer de 50 caractère est largement suffisant
c'est plutot un pb de passages des arguments
j'ai un warning a la compilation sur le tableau de chaines

attention : passage de l'argument n°7 de « Connect » d'un type pointeur incompatible

voila en fait
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:12
parce que char **RegisteredChannels_Name et char RegisteredChannels_Name[24][50] sont 2 types qui n'ont strictement rien à voir

char **RegisteredChannels_Name c'est un pointeur de char*

RegisteredChannels_Name[24][50] c'est un tableau de char 2 dimensions cad une collection de 24*50 char contigu en memoire pouvant etre indexés en 2d

passe un char ** en parametre
0
ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005
29 juil. 2004 à 21:25
ok mais ensuite je dois faire une allocation dynamique malloc( ? * sizeof(char)) ?
0

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

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 21:26
Alloue dynamiquement

++
0
ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005
29 juil. 2004 à 21:29
c vague ... lol
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:32
tu n'es pas oblige d'allouer

en partant de
RegisteredChannels_Name[24][50];

tu fais

char *c[24];
for( i 0; i <24; i++ ) c[i] RegisteredChannels_Name[i];

et tu passe c en parametre
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 21:34
char **t; //va etre [24][50]

t = malloc(24 * sizeof(char *));

for (i = 0; i < 24; ++i) {
t[i] = malloc(50);
}

Voila, ca devrait marcher ca !

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 21:36
Tiens Djl, jen profite pour poser une kestion du mm style :

j'ai une structure, je ne sais pas combien il va men falloir, commet je peu faire pour avoir un tab dinamik de structures ?

merci d'avance
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:40
struct S{ ... } *s;

s = malloc( n * sizeof (struct s) );

tout simplement
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:41
j'ai la flemme avec les nom

s = malloc( n * sizeof (struct S) );

desolé
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 21:45
Non, il faudrait en fait ke "j'alloue une structure" a chak passage ds une fonction, car ca se fait au fur et a mesure, jne sais pas combien d'element je vais devoir stocker sof a la fin du prog..
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:50
alors une liste, ta structure doit avoir comme membre un pointeur du meme type

c'est ce que tu veux faire ?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
29 juil. 2004 à 21:53
Je voulais eviter les listes chainé, mais jpense ke jV devoir en faire une..Bon, jV my mettre, mais bon, ca me fait chier, c pas un truc ke japrecie trop les listes chainées, V recup un vieu prog, et prendre ca come base.

merci ++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 juil. 2004 à 21:57
code ca le plus simplement possible, selon tes besoins
0
ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005
29 juil. 2004 à 22:19
merci alexman et djl pour vos posts

a vrai dire je n'ai testé que la proposition d'alexman avec l'allocation dynamique (sans oublier le free bien entendu)
et je dois confirmer .. ca marche ;)

a bientot sur cppfrance

ashboody
0
Rejoignez-nous