Nested Struct + Malloc



  • Moin,

    ich habe eine Frage bzgl. des unten stehenden Codes. Die Compilierng läuft fehlerfrei, jedoch ist die Ausgabe dieses rel. simplen Programms fehlerhaft.
    Sprich: Bei Eingabe von 1,2,3,4,5 und x erhalte ich 1,2,3,4,120,x. Leider reichen meine Kenntnisse noch nicht soweit, eine richtige Speicherverwaltung mit reinzunehmen, googlen u.a. hat nicht geholfen. In main() hatte ich bereits versucht, Speicher für den struct zu reservieren, dort gab es einen Typen Warnung. Wie reserviere ich für die Nested Struct den Speicher und wie bekomme ich eine richtige Verarbeitung/Ausgabe.

    Währe über Tipps und Beispiele dankbar.

    Martin

    P.S.: Ich arbeite unter WinXP, Cygwin und gcc-3.4.4.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    #define	 MAX 5
    #define  STD 256
    
    /** -------------------------------------------------------  **/
    struct IARRAY{
    		int  opt[MAX];
    		char cmd[STD];
    };
    
    /** -------------------------------------------------------  **/
    struct ARRAY{
    		struct IARRAY IA; 
    		int val;
    };
    
    /** -------------------------------------------------------  **/
    struct ARRAY init_array(void) {
    
       int i;
       struct ARRAY Z;
    
       for(i = 1; i <= MAX; i++) {
          printf("Wert %d eingeben: ",i);
          scanf("%d",&Z.IA.opt[i]);
       }
    
       printf("\n String eingeben: ");
          scanf("%s",&Z.IA.cmd);
    
       return Z;
    }
    
    /** -------------------------------------------------------  **/
    void output_array(struct ARRAY Z) {
    
       int i;
    
       for(i = 1; i <= MAX ; i++)
          printf("%d\t", Z.IA.opt[i]);
    
       printf("\n%s", &Z.IA.cmd);
    
       printf("\n");
    }
    
    /** -------------------------------------------------------  **/
    int main(void) {
    
       //int *ptr;
    
       struct ARRAY new_array;
    
       //ptr  = (struct ARRAY *)malloc(sizeof(struct ARRAY));
    
       new_array = init_array();
    
       output_array(new_array);
    
       return EXIT_SUCCESS;
    }
    


  • Arrays fangen in C bei 0 an und hören bei Anzahl-1 auf.

    tt



  • ok,

    ganz blöder Fehler, löst sogar das Problem ...

    Meine bitte währe vielleicht noch mal ein bischen Hilfe in Bezug auf das malloc-Problem, wie kann ich für nested structs speicher reservieren, verwendenn und wieder freigeben.

    Danke,

    Martin



  • Für die unterstruktur wird zusammen mit dem gesamten Objekt Speicher angefordert. Wenn du diese Arrays dynamisch gestalten willst, brauchst du Pointer - und die kannst du dann ganz normal per malloc() mit Speicher versorgen.


Log in to reply