Warum bekomme ich initialization from incompatible pointer type Warnung?
So, ich bin mit gcc auf Linux und haben die beiden folgenden code-snippets in separaten Dateien (nur relaveant code-Abschnitte im Lieferumfang enthalten):
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;
}
Das Programm kompiliert und läuft einwandfrei, aber beim compilieren bekomme ich die Warnung:
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);
^
Ich bin neu in C und ich kann einfach nicht herausfinden, warum ich immer diese Warnung.
Ist die Funktion deklariert, bevor main?
Sehen Zeilennummer, ich glaube nicht, dass dieser Prototyp deklariert ist.
Dann ist es, denke ich...
nopes,
int_pair_list *head = malloc(sizeof(*head))
? oder int_pair_list *head = malloc(sizeof(head))
?Sehen Zeilennummer, ich glaube nicht, dass dieser Prototyp deklariert ist.
Dann ist es, denke ich...
nopes,
sizeof(*head)
korrekt ist.InformationsquelleAutor user163911 | 2015-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C eine Funktion (oder Prototyp) erklärt werden sollte vor es wird verwendet, um zu bestimmen, die richtige Signatur. Andernfalls wird der compiler versuchen zu "erraten" der korrekten Signatur. Während es ableiten kann, die parameter-Typen mit dem Aufruf, es ist nicht der Fall mit dem Rückgabewert-Typ, der ist standardmäßig auf
int
. In deinem code, die Funktion war nicht Prototyp vor der Verwendung, so ist der compiler vorausgesetzt, es ist die Rückkehrint
. Dies ist der Grund, es ist die Warnung, die Sie über inkompatible Typ Zuordnung.Yep, es behoben. Musste warten, bis mein computer nicht mehr abstürzt, nachdem Sie gebeten, es für zu viel Speicher (300425737571 ints :/).
InformationsquelleAutor Eugene Sh.