Sruct initialisieren: Speichergröße unbekannt?



  • Hi,
    Ich habe die Aufgabe, einen Array aus Integern zu schreiben, der vor falschen Zugriffen geschützt ist.
    Dazu habe ich in einem Header folgende Struktur definiert:

    struct ArrayEintrag {
        int eintrag;
        struct ArrayEintrag* naechster;
    };
    
    struct IntArray {
        int anzahlElemente;
        struct ArrayEintrag* anfang;
    };
    

    Dazu gibt es eine Funktion, die zum Erzeugen des IntArrays aufgerufen wird:

    struct IntArray* erzeugen(int n) {  //n ist Anzahl der zu erzeugenden Elemente
        int i = 0;
        struct IntArray* intarray = (struct IntArray*) malloc(sizeof(struct IntArray));
    
        if(intarray == NULL) {
            printf("Fehler bei der Speicherzuweisung!\n");
            exit(EXIT_FAILURE);
        }
        (*intarray).anzahlElemente = n;
        (*intarray).anfang = NULL;
    
        for(i=0; i < n; i++) {
            neuenEintragAnhaengen(intarray);
        }
    
        return intarray;
    }
    

    Die neuenEintragAnhaengen() lass ich hier aus Platzgründen mal weg, die fügt dem Array ein neues Element hinzu.

    So, dafür habe ich jetzt ein Testprogramm (der Header ist natürlich eingbunden):

    int main() {
        int anzahlElemente; int x; int n;
        struct IntArray testia;
        struct ArrayEintrag *zeiger;
    
        scanf("Wie viele Elemente soll der Array beinhalten?\n", &anzahlElemente);
        scanf("An welche Stelle im Array soll geschrieben werden?\n", &n);
        scanf("Was soll an diese Stelle geschrieben werden?\n", &x);
    
        testia = erzeugen(anzahlElemente); // Hier kommt der Fehler
        schreiben(testia, n, x);
    ...
    

    Beim Kompilieren tritt dann folgender Fehler auf:
    Fehler: Speichergröße von »testia« ist unbekannt

    Ich habe bereits danach gesucht, allerdings noch keine wirkliche Lösung gefunden, hoffe ihr könnt mir helfen.



  • erzeugen liefert einen Zeiger zurueck, testia ist keiner.



  • Hallo, danke, das scheint der Fehler gewesen zu sein.

    Jetzt sagt mir der Compiler allerdings:
    Fehler: Dereferenzierung eines Zeigers auf unvollständigen Typen
    für die Zeilen 17, 19, 20 (sind unten nochmal markiert)

    #include <stdio.h>
    #include <stdlib.h>
    #include "intarray.h"
    
    int main() {
        int anzahlElemente; int x; int n;
        struct IntArray *testia;
        struct ArrayEintrag *zeiger;
    
        scanf("Wie viele Elemente soll der Array beinhalten?%d\n", &anzahlElemente);
        scanf("An welche Stelle im Array soll geschrieben werden?%d\n", &n);
        scanf("Was soll an diese Stelle geschrieben werden?%d\n", &x);
    
        testia = erzeugen(anzahlElemente);
        schreiben(testia, n, x);
    
        zeiger = (*testia).anfang;  //Fehler 1
        while(zeiger != NULL) {
            printf("%d", (*zeiger).eintrag);   //Fehler 2
            zeiger = (*zeiger).naechster;    //Fehler 3
        }
    
        return 0;
    }
    


  • Ich nochmal, Problem ist gelöst!
    Habe in einem anderen Forum gelesen, dass die komplette Struktur in der .h schon mal definiert werden muss, ich hatte sie allerdings in der .c definiert und im Header nur deklariert.


Log in to reply