2016-04-17 14 views
0

Ich möchte eine Dinamically Matrix mit "Anzahl" Strukturelemente.Wenn ich versuche, "theNumber" zu drucken, wird das Programm nicht aus der printf-Funktion verlassen.Es halten mich Nullen von printf.Vielleicht habe ich eine falsche Zuordnung gemacht? Irgendeine Idee, bitte?Drucken des Feldes von Struktur in C

struct number { 
    int theNumber; 
}; 

struct table { 
    struct number ** mem; 
}; 

unsigned i; 

struct table *createInstance(unsigned min) { 

//flag1 
    struct table * someInstance = (struct table *) malloc(sizeof (struct table)); 

//flag2 
    if (someInstannce == NULL) { 
     return 0; 
    } 

//flag3 
    someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **)); 

//flag4 
    for (i = 0; i <= min; i++) { 
     someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 
    } 

//flag5 
    for (i = 0; i <= min; i++) { 
     for (j = 0; j = 5; j++) { 
      printf("%d", someInstannce->mem[i][j].theNumber); 
     } 
    } 

    return someInstance; 
} 
+0

Da dies streng genommen C ist, können Sie den malloc-Rückgabewert nicht umsetzen. – sjsam

+0

Sie verwenden 'someInstance' und' someInstancen'. Sind diese Tippfehler oder gibt es irgendwo unter diesem Namen eine andere Variable? Ist dieser Code "etwas" wie dein Code, aber nicht * eigentlich * dein Code? –

+1

@sjsam: casting 'void *' zu anderen Zeigern ist erlaubte3d durch den Standard. Es wird jedoch davon abgeraten. – Olaf

Antwort

0

Diese Linie

for (j = 0; j = 5; j++) 

j zu 5 und die Zustandsüberprüfung festklemmen wird "true" seit 5 nicht-0 ist. Die Schleife wird niemals enden. Versuchen

for (j = 0; j < 5; j++) 

ich auch

someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 

Frage, wo man in einen anderen Typ umgewandelt, und fordern Sie die Zeigergröße, nicht die Struktur Größe. Sollte die Zuteilung sein

someInstance->mem[i] = calloc(5, sizeof (struct number) + 1); 
0

Sie sollen Speicher für jeden Zeiger zuweisen, irgendeine Art von Inhalt dieses Zeigers zum Beispiel int * i = malloc (sizeof (int));

Bitte bearbeiten

someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **)); 

zu

someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number *)); 

und

someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 

zu

someInstannce->mem[i] = (struct number *) calloc(5, sizeof (struct number) + 1); 

T Die Druckschleife hat einen schlechten Zustand, j = 5 sollte j < sein. 5.