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

Bibliothèque standard C Discussion :

"Use of uninitialised value"


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut "Use of uninitialised value"
    Bonjour,

    J'ai un petit warning de Valgrind :

    "Use of uninitialised value of size 4" (ligne rouge)

    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
    const char basic_chars[16] = { 	'a', 'b', 'c', 'd', 'e', 'f', '0', '1',
    				'2', '3', '4', '5', '6', '7', '8', '9'
    			};
    
    typedef struct USERS
    {
    
    	unsigned int nraw;
    	unsigned int flags;
    	unsigned int type;
    
    	char sessid[33];
    	char pubid[33];
    
    
    } USERS;
    void gen_sessid_new(char *input, acetables *ace_tables)
    {
    	unsigned int i;
    	
    	do {
    		for (i = 0; i < 32; i++) {
    			input[i] = basic_chars[rand()%16];
    		}
    		input[32] = '\0';
    	} while(seek_user_id(input, ace_tables) != NULL && seek_user_simple(input, ace_tables)); // Colision verification
    }
    void foo(acetables *ace_tables)
    {
    	USERS *nuser;
    	
    	nuser = malloc(sizeof(*nuser));
     	if (nuser == NULL) {
    		exit(0);
    	}    
    	gen_sessid_new(nuser->sessid, ace_tables);
    }
    Pas d'optimisation de compilation.

    Peut être un bug de valgrind ou quelque chose que j'ai loupé ?

    Merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    J'ai un petit warning de Valgrind :

    "Use of uninitialised value of size 4" (ligne rouge)
    Poste du code compilable. Si il n'est pas portable, indique la plateforme...
    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
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c:17: error: syntax error before "acetables"
    C:\dev\hello\main.c:18: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `gen_sessid_new':
    C:\dev\hello\main.c:23: error: `input' undeclared (first use in this function)
    C:\dev\hello\main.c:23: error: (Each undeclared identifier is reported only once
    C:\dev\hello\main.c:23: error: for each function it appears in.)
    C:\dev\hello\main.c:23: warning: implicit declaration of function `rand'
    C:\dev\hello\main.c:26: warning: implicit declaration of function `seek_user_id'
    C:\dev\hello\main.c:26: error: `ace_tables' undeclared (first use in this function)
    C:\dev\hello\main.c:26: error: `NULL' undeclared (first use in this function)
    C:\dev\hello\main.c:26: warning: implicit declaration of function `seek_user_simple'
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:28: error: syntax error before '*' token
    C:\dev\hello\main.c:29: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `foo':
    C:\dev\hello\main.c:32: warning: implicit declaration of function `malloc'
    C:\dev\hello\main.c:33: error: `NULL' undeclared (first use in this function)
    C:\dev\hello\main.c:34: warning: implicit declaration of function `exit'
    C:\dev\hello\main.c:36: error: `ace_tables' undeclared (first use in this function)
    Process terminated with status 1 (0 minutes, 0 seconds)
    9 errors, 7 warnings

  3. #3
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Hello,

    je n'ai posté qu'un "bout" de code représentatif.

    Mais après quelque debug j'ai trouvé ce qui provoquai le warning.
    Visiblement "rand()%16". Pourtant mon random est bien "seedé" au démarrage de l'application. Cela dis je n'ai pas remarqué de bug ni de comportement anormal. Valgrind me fait peut être défaut pour rien ?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ah mon avis c'est juste que valgrind n'est pas assez malin pour se rendre compte que rand()%16 est entre 0 et 15.

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par matafan Voir le message
    Ah mon avis c'est juste que valgrind n'est pas assez malin pour se rendre compte que rand()%16 est entre 0 et 15.
    Nope puisque il trouve les erreurs à l'exécution (c'est pas une prédiction)
    Je vois pas trop ce qui va pas, je pencherais plus pour un mauvais numero de ligne dû par exemple à un programme non recompilé

  6. #6
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Je pencherais pour un souçis d'allocation de `input`.

Discussions similaires

  1. Use of uninitialized value in pattern match (m//)
    Par Vladkergan dans le forum Langage
    Réponses: 4
    Dernier message: 13/01/2008, 19h25
  2. Réponses: 1
    Dernier message: 17/09/2006, 22h02
  3. Réponses: 4
    Dernier message: 23/06/2006, 19h03
  4. [USE STRICT] uninitialized value in print ...
    Par pop_up dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 14h18
  5. [langage] Use of uninitialized value
    Par Batou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2005, 10h28

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