mehrdimensionales arrays mit new !?!
-
Hab leider ne allzheimer schwaeche bezueglich new auf mehrdimensionale arrays:
folgendes liefert bei mir nen absturz:
double w[][] = new double[3][3];
werden nicht so dynamisch arrays alloziert?
danke.
-
Was meinst du mit abstürzen? Kompiliert es überhaupt? Wenn nicht, dann probier folgendes:
double **w = new double[3][3];
-
nee das funzt net, compiler sagt er kann der linken seite (double *) nicht einen Wert (double)[] zuweisen.
ich moechte nur wissen wie man dynamisch eine MxN Matrix erzeugt mit new (ohne malloc oder old-school-C) macht?!
Danke.
-
-
also:
int** array; array = new int*[n]; for(int i = 0; i < n; i++) array[i] = new int[m]; // wieder freigeben: for(int i = 0; i < n; i++) delete [] array[i]; delete [] array;
-
das nenne ich ne antwort
-kurz
-knackisch
-schnell und jutes funzt.
danke.
-
Das gleiche steht im übrigen auch in der Faq sehr schön erklärt, in Zukunft einfach
öfter mal dort rein schauen
-
SirLant schrieb:
Das gleiche steht im übrigen auch in der Faq sehr schön erklärt, in Zukunft einfach
öfter mal dort rein schauenDas ist genau das was ich oben gemeint habe, mit dem entsprechenden Link
peperonee schrieb:
das nenne ich ne antwort
-kurz
-knackisch
-schnell und jutes funzt.
danke.
Damit war ich ja hoffentlich ich gemeint
-
Entyl_Sa schrieb:
SirLant schrieb:
Das gleiche steht im übrigen auch in der Faq sehr schön erklärt, in Zukunft einfach
öfter mal dort rein schauenDas ist genau das was ich oben gemeint habe, mit dem entsprechenden Link
Weiß ich doch, wollte es nur nochmal in direkten Worten ausdrücken
-
Was ist damit?
double (*w)[3] = new double[3][3];
-
Geo schrieb:
Was ist damit?
double (*w)[3] = new double[3][3];
Das ist nur zur hälfte dynamisch.
-
ich könnte ein paar helper vorschlagen
const size_t marr(size_t spalten_pro_zeile, size_t zeile, size_t spalte) { return spalten_pro_zeile * zeile + spalte; } double * array = new double[3*3]; array[marr(3, 1, 1)] = 10; // array[1][1] = 10;
wenn man noch ein functor baut dann kann man sich die 3 sparen
class marr { public: marr(size_t spalten_pro_zeile) :spalten_pro_zeile_( spalten_pro_zeile ) { } const size_t operator()(size_t zeile, size_t spalte) const { return spalten_pro_zeile_ * zeile + spalte; } private: const size_t spalten_pro_zeile_; }; //und dann marr dim(3); double * array = new double[3*3]; array[dim(1, 1)] = 10; // array[1][1] = 10;
aber dann fragt man sich wieso man nicht gleich ein container benutzt
und noch ein verbesserungs vorschlag
int** array = new int*[n]; int * tmp = new int[n*m]; for(int i = 0; i < n; i++) array[i] = &tmp[m * n]; // wieder freigeben: delete [] array[0]; delete [] array;
das spart n-1 new und delete aufrufe und der speicher ist an einen block!