Wer weiß Rat?



  • Hallo zusammen: kleines C-Problem

    typedef struct {
    int x,y;
    }muster;

    muster vektor[10]; // 10 Elemente

    // Hauptprogramm
    void main(){

    // Zeiger auf Struktur und Speicher reservieren
    muster *zeiger = (muster*) malloc (sizeof(muster));

    // Zeiger auf das erste Element
    *zeiger = vektor;
    usw...
    }

    Wie kann ich zusätzlich überprüfen ob für die Struktur genug Speicher vorhanden ist? Wenn nicht dann Fehlermeldung, sonst Speicher reservieren.

    Vielen Dank...
    Gruß Eddi



  • zeiger auf NULL prüfen 😉

    zeiger = (muster*) malloc (sizeof(muster));
    
    if(zeiger==NULL)
     // ...
    else
     // ...
    


  • Leider ist dein Code unklar. Die Zeile "*zeiger = vektor" ergibt keinen großen Sinn. '*zeiger' ist ein Objekt vom Typ 'muster' ('zeiger' ist hingegen vom Typ 'muster*'!) und 'vektor' ist in dem Kontext als vom Typ 'muster*' zu lesen, bei der Zuweisung stimmen also die Typen nicht überein.

    Kannst Du vielleicht in einfachen Worten schildern, was Du vorhast und was deine Vorkenntnisse in C sind?



  • Vielen Dank für die schnelle Antwort.

    Eine Frage hätte ich noch dazu. Wie sieht dann die else-Anweisung aus?
    Ist der Zeiger mit der Speicherreservierung schon auf die Struktur gesetzt?

    Gruß Eddi



  • Du brauchst kein malloc. "muster vektor[10]" reserviert 10*sizeof(muster) Bytes. "muster *zeiger = vektor" gibt einen Zeiger auf das erste Element und gut ist.



  • @racer2000
    Schau dir mal an, was der Unterschied zwischen statischem, automatischem und dynamischem Speicher ist. Und wann und wie du welche Art verwendest. (wäre vielleicht auch mal was für die FAQ Sektion 🙂 )



  • Du reservierst speicher

    muster *zeiger = (muster*) malloc (sizeof(muster));
    

    und überschreibst dir die Adresse des neu angelegten speichers direkt wieder (davon ausgehend, dass er den Fehler behoben hat).

    zeiger = vektor;
    

    solltest du tunlichst vermeiden, stichwort speicherlöcher.

    // Zeiger zeigt erstmal ins nichts
    muster *zeiger = NULL;
    
    // und bekommt jetzt eine neue Adresse
    zeiger = vektor;
    

    den Speicher den du brauchst hast du ja schon hier reserviert

    muster vektor[10]; // 10 Elemente
    

Anmelden zum Antworten