Zeiger im Struct allokieren...



  • Hallo,

    Bin neu in der C-Programmierung, also verzeiht eine zu dämliche Frage... folgendes Problem hab ich.

    // Das hatte ich bisher
    
    #define Anzahl 10
    
    struct Length
        {
            double LenArray[Anzahl];
        };
    typedef struct Length Lengths
    
    Lengths *Koordinatenachsen[3];
    // -------------------------------------
    // Hätte aber gerne irgendwie sowas
    
    int Anzahl;
    int Achsen;
    
    struct Length
        {
            double *LenArray;
        };
    typedef struct Length Lengths
    Lengths *Koordinatenachsen;
    

    Wie bekomme ich dynamisch Speicher alloziert, für Koordinatenachsen mit Achsen als Wert und innerhalb der Achse ein LenArray mit Anzahl als Wert für die Längenangaben ?

    Workarounds, Lösungen und Fragen alles ist mir willkommen, komme an dieser Stelle einfach nicht weiter.

    Winn



  • dynamischen speicher forderst du mit malloc (unter c)
    bzw. new (unter c++) an.

    in c:
    #include <stdio.h>
    
    Koordinatenachsen = malloc( sizeof( Lenghts ) * achsen );
    koordinatenachsen[0].LenArray = malloc( sizeof( double ) * anzahl ); 
    
    in c++:
    #include <cstdio>
    using namespace std;
    Koordinatenachsen = new Lenghts[3];
    koordinatenachsen[0].LenArray = new double();
    


  • Super ! Besten Dank ! Meintest aber bestimmt die <stdlib.h> für die dynamische Speicherallokation 😉

    Winn

    Hier ein funktionierendes Beispiel

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        int Anzahl;
        int AnzahlAchsen;
        int ctr;
        int ktr;
    
        struct Length
            {
                double *LenArray;
            };
        typedef struct Length Lengths;
    
        Lengths *Achsen;
    
        Anzahl=8;
        AnzahlAchsen=3;
    
        Achsen=(Lengths *)calloc(AnzahlAchsen,sizeof(Lengths));
        for(ctr=0;ctr<AnzahlAchsen;ctr++) Achsen[ctr].LenArray=(double *)calloc(Anzahl,sizeof(double));
    
        for(ctr=0;ctr<AnzahlAchsen;ctr++)
            {
                for(ktr=0;ktr<Anzahl;ktr++) printf("(%d,%d) %f\t",ctr,ktr,Achsen[ctr].LenArray[ktr]);
                printf("\n");
            }
    
        return 0;
    }
    


  • für new/delete musst du garnix includieren. wenn du c programmieren willst, nimm malloc&co, wenn c++ ann nimm new und delete. aber ja nicht vermischen. (warum umbedingt new? weils exceptions wirft)



  • Wenn du unter C++ programmierst, solltest du die Speicherverwaltung von new und delete bevorzugen !
    EDIT:Da war jemand schneller...

    [ Dieser Beitrag wurde am 09.05.2003 um 23:58 Uhr von KPC editiert. ]



  • Aber calloc setzt die Werte direkt auf 0, bietet sich also für meine Zahlenwerte an ! Deswegen ist es meine Wahl gewesen 😉

    Endlich mal ein Forum, wo was los ist und jeder jedem hilft... versuch mich dann auch mal zu helfen, obwohl ich ja noch nicht so fit in C/C++ bin.

    Winn



  • class Container {
        public:
            Container() { wert = new double (0.0); } // Setzt den Wert auf 0
            ~Container() { delete wert; }
            double *wert;
    };
    Container *array;
    array = new Container [50]; // 50 neue Container, wert jeweils auf 0 gesetzt
    


  • aeh jo meinte stdlib.h, sorry.
    und fuer new delete ists sowieso quatsch.
    :o


Anmelden zum Antworten