Array!!!
-
hallo Leute,
ich möchte ein Array erstellen damit ich einen Raster darstellen kann! und das mache ich wie folgt:float grenzen[6];
float xkoord, ykoord;
int xdim,ydim;
int xmin ,xmax ,ymin ,ymax;// geometrische Grenzen in x und y Richtung auslesen
polydata->GetBounds(grenzen); //(xmin,xmax,ymin,ymax, zmin,zmax).
xmin = grenzen[0] - 20;
xmax = grenzen[1] + 20;
ymin = grenzen[2] - 20;
ymax = grenzen[3] + 20;// Akkumulator mit Raster 1mm für x-y Ebene einrichten
xdim = xmax - xmin;
ydim = ymax - ymin;
int akkumulator[xdim][ydim];aber beim Kompilieren kommt immer die Fehlermeldung, dass für akkumulator[][] "konstante Ausdruck erwartet" ist und "error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich"
wie könnte ich das realisieren! warum werden xdim und ydim, die ich oben berechne nicht angenohmen!??
ich bedanke mich im Voraus....
-
Bei solchen Arrays wird eine Konstante erwartet, deren Wert schon zur Compilezeit feststeht!
Alternative: mit new und delete ...
Verschoben nach C++.
-
Oder besser mit vector. Zu zweidimensionalen Arrays findest du aber bestimmt genug FAQ-Beiträge.
Und irgendwer könnte ja mal bei Langeweile ne schöne area-Klasse schreiben, bei den ganzen Nachfragen... *faul*
-
ich habe jetzt den Code folgendemassen umgestellt :
.
.
xdim = xmax - xmin; ydim = ymax - ymin;int* pAkkumulator = new int[ xdim * ydim * sizeof(int)]; // dynamische Speicherallokation
std::cout << " xdim: "<< xdim* sizeof(int) << " ydim: "<< ydim * sizeof(int) <<endl;
.
.aber wenn ich das Ergebnis vom ( xdim = xmax - xmin; ydim = ymax - ymin;) mit dem von (xdim* sizeof(int), ydim * sizeof(int)) vergleiche, habe ich folgende Werte :
xdim = xmax - xmin = 161 aber xdim* sizeof(int) = 641
ydim = ymax - ymin = 145 aber ydim* sizeof(int) = 580also Unterschied von Faktor 4!!!
was heisst das? was mache ich falsch?
ich bedanke mich ...
Chakhi
-
ganz einfach: sizeof(int) ist 4
In deinem new brauchst du kein *sizef(int). Das wird schon automatisch gemacht, da du ja new int machst.
-
:p achso ...danke..
jetzt habe ich weitere Fragen:
1. wie initialisiere ich jetzt mein Array ich will erstmal so was erstellen:
0 0 0 ... 0
0 . . ......
. . . .......
0 0 0 ... 0
und zwar xdim- und ydim-mal...
und später die werte erhöhen!2. für mein new brauche ich auch ein Delet, oder?
Bitte erntschuldigt mich, bin ganz neu!
Chakhi
-
Chakhi2 schrieb:
für mein new brauche ich auch ein Delet, oder?
ChakhiJa.
Wird der Speicherbereich nicht freigegeben, kann es
zu einem sog. "memory leak" kommen. D.h. niemand kann auf den
Speicher mehr zugreifen und das Loch ist ungenutzt und
der Speicher ist verloren bis das Programm beendet wird.
-
@DDuelec : Danke
jetzt bleibt nur die erste Frage, oder ist ergindwie unverständlich gestellt??
wie initialisiere ich jetzt mein Array ich will erstmal so was erstellen:
0 0 0 ... 0
0 . . ......
. . . .......
0 0 0 ... 0
und zwar xdim- und ydim-mal...
und später die werte erhöhen!Chakhi
-
Nimm doch den vector. new[] und delete[] sind ein seltsames Konstrukt, dass man höchstens zur Implementierung von low-level-Klassen benutzen kann.
#include <vector> ... xdim = xmax - xmin; ydim = ymax - ymin; std::vector<int> Akkumulator(xdim * ydim); /* mit Akkumulator[n] zugreifen, Freigabe automatisch; der Rest ist erstmal unwichtig, steht aber im Buch deines Vertrauens sicher ausführlich erklärt */
Wenn dein Diagramm darstellen soll, dass du den Vektor mit Nullen füllen willst: Das ist er schon
Ansonsten kann man Container mit std::fill aus <algorithm> füllen.