2016-04-17 17 views
0

Ich habe einige Probleme mit einer Hauptdatei.Ich habe eine Matrix von Strukturen (theoretisch) und ich möchte alle meine "p" -Parameter in allen Strukturen ändern. Dies ist die Hauptdatei:C Fehler beim Dereferenzieren des Zeigers auf unvollständigen Typ

int main(int argc, char** argv) { 
int i, j; 

struct PQ *queue; 
queue = createQ(5); 
for (i = 0; i <= 5; i++) { 
    for (j = 0; j = 20; j++); 
    queue->mem[i][j].p = 1; 
} 

for (i = 0; i <= 5; i++) { 
    puts("\n"); 
    for (j = 0; j <= 20; j++); 
    printf("%d ",queue ->mem[i][j].p); 
} 


return (EXIT_SUCCESS); 
} 

Und das ist eine andere Datei, die Strukturen Definiton und erzeugen Funktion enthält:

typedef struct newLine{ 
    unsigned p; 
} newLine; 


struct PQ{ 
    struct newLine ** mem; 
}; 

struct PQ *createQ(unsigned min){ 
    int i=0; 
    struct PQ *newQ = malloc(sizeof(PQ)); 
    newQ->mem = malloc(min*sizeof(newLine *)); 

    for(i=0;i<=min;i++){ 
     newQ->mem[i]=calloc(20,sizeof(newLine)); 
    } 

    return newQ; 
} 

Irgendwelche Ideen?

+0

Könnten Sie bitte geben ein [MCVE] (https://stackoverflow.com/help/mcve) zusammen mit der Compiler/Linker-Ausgabe, die th anzeigt Die Fehlermeldung, die Sie im Titel Ihrer Frage gepostet haben? Es wird uns erheblich helfen. Vielen Dank. – DevNull

+0

main.c: In der Funktion 'main': main.c: 13: 14: Fehler: Dereferenzierung Zeiger auf unvollständigen Typ Warteschlange-> mem [i] [j] -> p = 1; ^ main.c: 19: 28: Fehler: Dereferenzierung Zeiger auf unvollständigen Typ printf ("% d", Warteschlange -> mem [i] [j] -> p); –

+2

'queue-> mem [i] [j] -> p' ->' queue-> mem [i] [j] .p' auch 'für (int i = 0; i = min; i ++) {' : 'i = min' ist falsch. – BLUEPIXY

Antwort

3

Sie sehen den Fehler, weil Struktur Teil des Typs in C ist, also müssen Sie struct newline in Struktur PQ verwenden. Ein anderer Weg ist typedef zu verwenden Typ alias zu erstellen:

typedef struct newline { 
    int p; 
} newline; 

Die Art und Weise struct-Mitglied verwendet wird zuzugreifen. Verwenden Sie in struct den -> Zeiger auf struct, verwenden Sie stattdessen queue->mem[i][j].p.

Es gibt andere Probleme.

Sie können nicht dereferenzieren einem nicht initialisierten Zeiger liefert es nicht definiertes Verhalten:

PQ *newQ; 

sein sollte:

struct PQ *newQ = malloc(sizeof(struct PQ)); 

Sie mit der richtigen Indirekt zuweisen sollte:

newQ->mem = malloc(min * sizeof(newline*)); 
for(int I = 0;i < min; i++){ 
    newQ->mem[i] = calloc(20, sizeof(newLine)); 
} 
+0

Ich habe den ursprünglichen post.Same Verhalten bearbeitet. "Queue-> mem [i] [j] .p = 1;" und "printf ("% d ", Warteschlange -> mem [i] [j] .p);" aus der Hauptdatei gibt mir Dereferenzierungszeiger auf unvollständigen Typ Fehler. –

+0

Sind Sie die andere Datei in die main.c einschließen? – fluter

+0

Ja. Ich hoffe, ich habe es gut gemacht. –

Verwandte Themen