Pourquoi suis-je une initialisation à partir d'incompatible pointer type d'avertissement?

Donc je suis en utilisant gcc sous Linux et que les deux extraits de code dans des fichiers séparés (seulement relaveant sections de code inclus):

int main()
{
    /* Code removed */
    int_pair_list *decomp = prime_decomp(N);
    if (decomp)
        while(decomp->next)
            decomp = decomp->next;
    printf("%d\n" decomp->value_0);
}

int_pair_list *prime_decomp(unsigned int n)
{
    int_pair_list *head = malloc(sizeof(*head));
    int_pair_list *current;
    /* method body removed, current and head remain as int_pair_list pointers */
    return current ? head : NULL;
}

Le programme compile et s'exécute correctement mais lors de la compilation, j'obtiens l'avertissement:

problem_003.c: In function main’:
problem_003.c:7:26: warning: initialization from incompatible pointer type [enabled by default]
  int_pair_list *decomp = prime_decomp(N);
                      ^

Je suis novice en C et j'ai juste ne peux pas savoir pourquoi je reçois ce message d'avertissement.

  • Est la fonction déclarée avant main?
  • int_pair_list *head = malloc(sizeof(*head)) ? ou int_pair_list *head = malloc(sizeof(head)) ?
  • Voir le numéro de ligne, je ne pense pas que ce prototype est déclarée.
  • Alors ça y est, je suppose...
  • nopes, sizeof(*head) est correct.
InformationsquelleAutor user163911 | 2015-08-11