Rechercher : dans
Par :

[C] Erreur memoire (valgrind)

Dernière réponse le 5 mar 2008 à 14:10:54 Francky, le 5 mar 2008 à 13:16:02 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de recoder un shell en C.
Je viens de terminer les alias, cela dit j'ai un probleme lorsque je lance valgrind.

Il me fait :
==1669== Conditional jump or move depends on uninitialised value(s)
==1669== at 0x8048B34: my_strcmp (in ./mysh)
==1669== by 0x8048997: alias (in ./mysh)
==1669== by 0x8049504: pre_command (in ./mysh)
==1669== by 0x8048884: mishi_runner (in ./mysh)
==1669==
==1669== Conditional jump or move depends on uninitialised value(s)
==1669== at 0x8048A14: alias (in ./mysh)
==1669== by 0x8049504: pre_command (in ./mysh)
==1669== by 0x8048884: mishi_runner (in ./mysh)
==1669== by 0x8048910: main (in ./mysh)

voici les bouts de code concernes :

func pre-command

void    pre_command(char *str)
{
  if (str[0] != 10)
    select_command(alias(str));
  else
    select_command(str);
}


func alias
char    *alias(char *alias)
{
  char  *command;
  int   fd;
  char  *buf;
  int   count;
  int   count2;

  buf = xmalloc(sizeof(*buf) * SMAX);
  command = xmalloc(sizeof(*command) * 32);
  fd = xopen(".mishirc", O_RDONLY);
  xread(fd, buf, SMAX);
  count = 0;
  while (buf[count] != 0)
    {
      if (my_strcmp(buf, "alias ", count, 0, 6) == 1
          && my_strcmp(buf, alias, count + 6, 0, my_strlen(alias, 0, 10)) == 1)


func my_strcmp
int     my_strcmp(char *str, char *str2, int count, int count2, int end)
{
  int   res;

  res = 1;
  while (end != 0)
    {
      if (str[count] != str2[count2])
        res = 0;
      count++;
      count2++;
      end--;
    }
  return (res);
}


Euh voili voilou , je ne comprend pas du tout l'erreur de Valgrind car toutes les variables qui se baladent ont ete initialise... non ?

Mici
Configuration: Linux
Firefox 2.0.0.12

Meilleures réponses pour « [C] Erreur memoire (valgrind) » dans :
[Langage C] C/C++ Erreur de segmentation Voir Qu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Début du vidage de mémoire physique (Kernel-stack-inpage-error) VoirSi Windows affiche un écran bleu avec le message suivant :kernel_stack_inpage errorAvec également des informations similaires à celles-ci : ***stop: 0x0000007 (0x000000e.0x00000000.0x00901000) début du vidage de la mémoire physique La page...
Carte mémoire (mémoire Flash) VoirIntroduction à la mémoire Flash La mémoire flash est une mémoire à semi-conducteurs, non volatile et réinscriptible, c'est-à-dire une mémoire possédant les caractéristiques d'une mémoire vive mais dont les données ne se volatilisent pas lors...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

 fiddy, le 5 mar 2008 à 14:10:54

Salut,

Dans ta fonction alias, la variable buf n'est pas initialisée. Tu as juste fait l'allocation.

Cordialement
Google is your friend

Répondre à fiddy