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