Valgrind: lecture non valide de la taille 1
Je vais avoir un problème avec valgrind:
C'est mon programme (enfin la partie principale où les erreurs apparaissent):
int main()
{
char comanda[N];
....
char *p;
while( fgets(comanda,100,stdin)!=NULL)
{
p=strtok(comanda," \n");
if (strcmp(comanda,"INIT")==0)
{
p=strtok(NULL," ");
Init(n);
}
395 >>if (strcmp(p,"DUMP")==0)
{
Dump(n);}
if (strcmp(p,"ALLOC")==0)
{
Alloc(j,n);
}
....return 0;}
Et quand je lance valgrind il dit:
Invalid read of size 1 at 0x401569: main (:395) Address 0x0 is not stack'd malloc'd or (recently) free'd
Je ne peux pas comprendre quel est le problème avec ce programme.
source d'informationauteur user1934103
Vous devez vous connecter pour publier un commentaire.
Comment lire ceci:
Votre programme essaie de lire un octet à partir de quelque part que Valgrind ne l'aime pas.
Où dans le code ce qui se passe (strcmp a été incorporé)
Ce que l'adresse c'était la lecture - 0 x 0 est "NULL". Le reste de la déclaration qui vient d'être dit pourquoi il est invalide (c'est pas de la pile, ce n'est pas quelque chose que vous avez obtenu à partir de malloc, et n'a été libéré récemment). La "récemment", parce que valgrind conserve la trace de la mémoire libérée pour un nombre limité de libère, on ne peut pas affirmer qu'il n'était pas libéré d'un million libère retour - dans ce cas, il n'était pas, mais si vous voyez un message comme ça, il est PEUT-être qu'il est devenu invalide parce qu'il a été libéré il y a des siècles. L'adresse ne serait pas zéro tho' (ou proche de zéro).
Il est possible pour
strtok
renvoie une valeur NULL quand il n'y a pas plus de jetons à gauche.Lorsque vous passez NULL
strcmp
c'est un comportement indéfini comme vous de la référence NULL.