IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

passage paramétres + copie tableaux


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut passage paramétres + copie tableaux
    Bonjour voila j'ai une liste chainée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct listeClients 
    {	
    	/* données */
    	int socket;
    	char pseudo[256];
    	/* chainage */
    	struct listeClients * suivant ;
    };
    avec sa fonction ajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    struct listeClients * ajoutListe(struct listeClients *l, int sock, char *nom)
    {
    	/* allocation du noeud */
    	struct listeClients *nouveau = malloc (sizeof *nouveau);
     
       /* si tout c'est bien passe : */
    	if (nouveau != NULL) {
          /* mise a jour des champs : */
     
          /* donnees */
    		nouveau->socket = sock;
    		memcpy(nouveau->pseudo, nom, strlen(nouveau->pseudo));
          /* chainage par defaut */
    		nouveau->suivant = NULL;
     
          /* chainage */
    		if (l == NULL){
             		/* c'est le premier : */
             		l = nouveau;
    		}
    		else {
             /* on cherche le dernier noeud */
    		struct listeClients *p = l;
     
    		while (p->suivant != NULL) {
                /* pointer sur le suivant */
    			p = p->suivant;
    		}
     
             /* modification du chainage */
    	p->suivant = nouveau;
    		}
    	}
    	return l;
    }
    à cette liste je veux y ajouter un tableau de caractéres construit comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char pseudo[256];
    nbytes=recv(newfd,pseudo,sizeof(pseudo)-1,0);
    pseudo[nbytes]=0;
    ajoutListe(l, newfd, pseudo);
    mais il n'y a rien à faire j'ai un "segmentation fault" et je ne vois pas mon erreur...si qqun pouvait m'orienter

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    A quel niveau le segfault ?

    Je préférerais un str(n)cpy à la place du memcpy.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Je vois déjà plusieurs problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    struct listeClients * ajoutListe(struct listeClients *l, int sock, char *nom)
    {
    	/* allocation du noeud */
    	struct listeClients *nouveau = malloc (sizeof *nouveau);
    
       /* si tout c'est bien passe : */
    	if (nouveau != NULL) {
          /* mise a jour des champs : */
    
          /* donnees */
    		nouveau->socket = sock;
    		memcpy(nouveau->pseudo, nom, strlen(nouveau->pseudo));    /* ne copie pas le '\0', donc nouvelle chaîne non terminée */
          /* chainage par defaut */
    		nouveau->suivant = NULL;
    
          /* chainage */
    		if (l == NULL){
             		/* c'est le premier : */
             		l = nouveau;    /* la déclaration de l n'en fait pas un pointeur modifiable */
    		}
    		else {
             /* on cherche le dernier noeud */
    		struct listeClients *p = l;
    
    		while (p->suivant != NULL) {
                /* pointer sur le suivant */
    			p = p->suivant;
    		}
    
             /* modification du chainage */
    	p->suivant = nouveau;
    		}
    	}
    	return l; /* ici l est inchangé */   
    }
    Donc je conseillerais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    int ajoutListe(struct listeClients **l, int sock, char *nom)
    {
    	/* allocation du noeud */
    	struct listeClients *nouveau = malloc (sizeof *nouveau);
     
       /* si tout c'est bien passe : */
    	if (nouveau != NULL) {
          /* mise a jour des champs : */
     
          /* donnees */
    		nouveau->socket = sock;
    		strcpy(nouveau->pseudo, nom );
     
          /* chainage par defaut */
    		nouveau->suivant = NULL;
     
          /* chainage */
    		if (*l == NULL){
             		/* c'est le premier : */
             		*l = nouveau; 
    		}
    		else {
             /* on cherche le dernier noeud */
    		struct listeClients *p = *l;
     
    		while (p->suivant != NULL) {
                /* pointer sur le suivant */
    			p = p->suivant;
    		}
     
             /* modification du chainage */
    	p->suivant = nouveau ;
     
    	return SUCCESS ; 
            }
           else
                return ERROR ;
    }
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #ifndef ERROR
    #define ERROR 0
    #endif
     
    #ifndef SUCCESS
    #define SUCCESS 1 
    #endif
     
    char pseudo[256];
    int    statut ;
     
    nbytes=recv(newfd,pseudo,sizeof(pseudo)-1,0);
    pseudo[nbytes]='\0';
    statut = ajoutListe(&l, newfd, pseudo);

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut passage paramétres + copie tableaux
    pourtant ma liste etait bien modifiée, moi et les pointeurs de tte maniére...

    même avec ces modifications j'ai tjrs la même erreure...

    apparemment c'est une erreure d'allocation mémoire mais je ne vois pas pourquoi

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    si tu n'as pas modifié ton code de départ, ta fonction ajouteliste retourne un pointeur sur une structure, et ton appel ne stocke dans rien.

    De plus, comme déjà signalé, ton pointeur l n'est jamais modifié si tu as gardé ton code de départ..

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    Citation Envoyé par souviron34
    si tu n'as pas modifié ton code de départ, ta fonction ajouteliste retourne un pointeur sur une structure, et ton appel ne stocke dans rien.

    De plus, comme déjà signalé, ton pointeur l n'est jamais modifié si tu as gardé ton code de départ..
    si j'ai modifié mon code comme tu me l'as indiqué mais j'ai tjrs l'erreur.
    en fait je pense qu'il y a un probléme à ce niveau la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(nouveau->pseudo, nom );
    NB:j'aimerais comprendre pourquoi alors avec ma fonction de depart ma liste etait bien modifiée?

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    montre ton nouveau code...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct listeClients 
    {	
    	/* données */
    	int socket;
    	char *pseudo;
    	/* chainage */
    	struct listeClients * suivant ;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    int ajoutListe(struct listeClients **l, int sock, char *nom)
    {
    	/* allocation du noeud */
    	struct listeClients *nouveau = malloc (sizeof *nouveau);
     
       /* si tout c'est bien passe : */
    	if (nouveau != NULL) {
          /* mise a jour des champs : */
     
          /* donnees */
    		nouveau->socket = sock;
    		strcpy(nouveau->pseudo, nom);
          /* chainage par defaut */
    		nouveau->suivant = NULL;
     
          /* chainage */
    		if (l == NULL){
             		/* c'est le premier : */
             		*l = nouveau;
    		}
    		else {
             /* on cherche le dernier noeud */
    		struct listeClients *p = *l;
     
    		while (p->suivant != NULL) {
                /* pointer sur le suivant */
    			p = p->suivant;
    		}
     
             /* modification du chainage */
    	p->suivant = nouveau;
    		}
    		return SUCCESS ;
    	}
    	else
                return ERROR ;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nbytes=recv(newfd,pseudo,sizeof(pseudo)-1,0);
    						pseudo[nbytes]='\0';
    						statut=ajoutListe(&l, newfd, pseudo);

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par juve1897
    as tu essayé ce que je t'avais proposé???

    je sais que ça à l'air bête mais parfois ça résout le problème.

    si ça te résout le problème c'est que tu as une erreur de mémoire ailleurs, c'est tout. Et que dans la nouvelle configuration tu n'écrases plus la même chose...

    De la pure chance... sur laquelle il ne faut absolument pas compter..

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    personne ne voit?

  11. #11
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Avec le code dernièrement posté tu as toujours l'erreur au même endroit ?

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'abord tu as oublié un pointeur :

    Ensuite essaye d'utiliser un debugger pour savoir où ça se plante réellement et les varaibles à ce moment-là (ddd, valgrind, ou autre).

    Juste sur le code donné, c'est un peu juste...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    voila ce que j'obtiens avec valgrind:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    valgrind ./serveur
    ==6063== Memcheck, a memory error detector.
    ==6063== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==6063== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==6063== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==6063== Using valgrind-3.2.1, a dynamic binary instrumentation framework.
    ==6063== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==6063== For more details, rerun with: -v
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x4009231: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x400981E: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x4009650: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x4009375: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x400939C: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x40099D3: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002AE6: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x4009231: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002B5C: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x4009274: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002B5C: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Conditional jump or move depends on uninitialised value(s)
    ==6063==    at 0x400939C: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x4002B5C: (within /lib/ld-2.3.6.so)
    ==6063==    by 0x400F709: (within /lib/ld-2.3.6.so)
    ==6063==
    ==6063== Invalid read of size 1
    ==6063==    at 0x401E7EA: strcpy (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6063==    by 0x8048B58: demon 
    ==6063==    by 0x8048FE4: main 
    ==6063==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
    ==6063==
    ==6063== Process terminating with default action of signal 11 (SIGSEGV)
    ==6063==  Access not within mapped region at address 0x0
    ==6063==    at 0x401E7EA: strcpy (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6063==    by 0x8048B58: demon 
    ==6063==    by 0x8048FE4: main 
    ==6063==
    ==6063== ERROR SUMMARY: 15 errors from 10 contexts (suppressed: 0 from 0)
    ==6063== malloc/free: in use at exit: 528 bytes in 2 blocks.
    ==6063== malloc/free: 2 allocs, 0 frees, 528 bytes allocated.
    ==6063== For counts of detected errors, rerun with: -v
    ==6063== searching for pointers to 2 not-freed blocks.
    ==6063== checked 56,992 bytes.
    ==6063==
    ==6063== LEAK SUMMARY:
    ==6063==    definitely lost: 0 bytes in 0 blocks.
    ==6063==      possibly lost: 0 bytes in 0 blocks.
    ==6063==    still reachable: 528 bytes in 2 blocks.
    ==6063==         suppressed: 0 bytes in 0 blocks.
    ==6063== Reachable blocks (those to which a pointer was found) are not shown.
    ==6063== To see them, rerun with: --show-reachable=yes
    Segmentation fault

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    mmmm je dirais que ça :

    ==6063== Invalid read of size 1
    ==6063== at 0x401E7EA: strcpy (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==6063== by 0x8048B58: demon
    ==6063== by 0x8048FE4: main
    ==6063== Address 0x0 is not stack'd, malloc'd or (recently) free'd
    est le plus important....

    tu as quelque chose dans un strcpy qui foire..

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    quand je retire le strcpy de ma fonction ajoutListe, je n'ai plus d'erreur de segmentation, mais je ne vois pas pourquoi ce strcpy ne veut pas fonctionner.

  16. #16
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ah ben si, tu n'a pas alloué de mémoire pour le champs pseudo de ta structure nouvellement créée.

    Donc un petit malloc pour pseudo et c'est bon (normalement).

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    comme ca c'est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveau->pseudo=malloc(sizeof(nom));
    d'ailleurs dans ma structure je devrais utilisé un pointeur sur chaine de caracteres ou un tableau de caracteres suffit?

  18. #18
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Genesis
    comme ca c'est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouveau->pseudo=malloc(sizeof(nom));
    d'ailleurs dans ma structure je devrais utilisé un pointeur sur chaine de caracteres ou un tableau de caracteres suffit?
    Un tableau de caractère suffit je pense, ensuite il faudrait contrôler la taille à copier dans le strcpy avec strncpy.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Par défaut
    rebelotte même erreur...

    si j'utilise un tableau de caracteres,je n'ai plus besoin de malloc?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct listeClients 
    {	
    	/* données */
    	int socket;
    	char pseudo[256];
    	/* chainage */
    	struct listeClients * suivant ;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strncpy(nouveau->pseudo, nom, sizeof(nom));

  20. #20
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Genesis
    rebelotte même erreur...

    si j'utilise un tableau de caracteres,je n'ai plus besoin de malloc?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct listeClients 
    {	
    	/* données */
    	int socket;
    	char pseudo[256];
    	/* chainage */
    	struct listeClients * suivant ;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strncpy(nouveau->pseudo, nom, sizeof(nom));
    Ah ben la c'est nom ou y'a rien dedans. Par ailleurs sizeof nom vaut la taille d'un pointeur (typiquement 4), donc tu aura un soucis à ce niveau.

    Vérifie la validité de nom dans ta fonction (en l'affichant par exemple).

Discussions similaires

  1. [ Struts ] [ Jsp ] [ Javascript ] Passage paramètre
    Par bouchette63 dans le forum Struts 1
    Réponses: 7
    Dernier message: 23/05/2006, 14h04
  2. Exécution d'un prog avec passage paramètres
    Par licorne dans le forum C
    Réponses: 3
    Dernier message: 04/05/2006, 13h05
  3. [SQLSERVER]Pb passage paramètre procédure stockée
    Par galinijay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/08/2005, 11h59
  4. [JSP] Problème passage paramètre
    Par besco dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/09/2004, 10h15
  5. Fenêtre enfant MDI : passage paramètre à la création
    Par Orangina dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/07/2004, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo