Newsgroup: it.comp.lang.c++
Titolo: aiuto matrice tridimensionale dinamica

devo creare e usare in visual c++ una matrice tridimensionale di 16 mln di
elementi, mi serve per gestire il colore..
ho provato prima così:
int ***color;
color = new int [256][256][256];
a parte il fatto che non so se la new sia formalmente corretta,non ne vuole
sapere di riconoscere ***..non capisco iol perchè visto che se in C scrivevo
**color veniva inteso come un array di array,vabbè...
siccome mi sono reso conto che forse riesco ad usare un vettore con 16 mln
di elementi,l'ho fatto così: (a proposito...devo creare questo vettore
dinamico perchè se no dentro una funzione non riesce ad allocarlo...)
int *color;
color = new int [256*256*256];
//versione con malloc:
//color = (int*)malloc ((256*256*256)sizeof(int));
qcs effettivamente fa, il problema è che in debug non riesco a capire se lo
crei o meno questo vettore.
nel riquadro a sinistra,dove ci sono i nomi delle variabli utilizzate, alla
voce color,cliccando sul +, c'è un numero negativo, tipo -863524781...quello
è l'area di memoria cui punta color?o la creazione è sbagliata e viene messo
quel numero dentro color?
ho qualche dubbio perchè in seguito, lavorando sul vettore,non vengono
indicati i campi, ma c'è sempre quel numero negativo che viene decrementato.
spero di essermi spiegato correttamente;ho guardato anche in vari tutorial e
manuali ma si fermano all'uso di un vettore di caratteri dinamico, oltre non
c'è altro.
grazie per l'eventuale aiuto.
marco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 color = new int [256*256*256];
Questo č un vettore monodimensionale di 256*256*256 elementi.
Quello che tu creavi facilmente in c con l'utilizzo dei puntatori tripli e
delle malloc, lo puoi comunque fare in c++ almeno in due modi diversi:
int (*color) [255][255]=new int[255][255][255];
/*riempi l' array.....*/
color[0][0][0] = 44;
color[0][1][0] = 68;
color[0][2][0] = 43;
Oppure soluzione piů elegante:
 typedef vector <int> dim1;
 typedef vector <dim1> dim2;
 typedef vector <dim2> vector3D;
 vector3D v; /*3 dimensioni*/
/* crei la struttura .... */
 v.push_back (dim2()); /*crea v[0]*/
 v.push_back (dim2()); /*crea v[1]*/
 v[0].push_back(dim1()); /*crea v[0][0]*/
 v[1].push_back(dim1()); /*crea v[1][0]*/
/* riempi l'array .....*/
v[0][0].push_back(30);
v[1][0].push_back(44);
Ciao

  typedef vector <int> dim1;
Direi che e' meglio ancora usare valarray rispetto a vector ...
Dan

 Questo è un vettore monodimensionale di 256*256*256 elementi.
si è vero, mi ero dimenticato di dire che non riuscendo a farne uno con 3
dimensioni separate, ne facevo uno lineare con 16 mln di campi, poi per
riempirlo facevo una cosa del tipo:
color[R+G*256+B*256*256]++;
cioè siccome devo inserire il valore RGB di un pixel nella casella della
matrice 3d che ha come x,y,z proprio R,G,B del punto letto, così dovrebbe
funzionare,è come se prendessi la matrice e la "svolgessi" per fare un
vettore monodimensionale.
il problema è quel ++ maledetto che va ad aumentare il valore negativo che
c'è dentro e che non capisco cosa sia.
cmq ora provo la tua soluzione e vedo se riesco ad ottenere ciò che voglio.
ah una domanda forse stupida:ma visto che è un vettore dinamico che si
riempie man mano che lo uso, c'è bisogno di inizializzare i campi?
ciao e grazie.


 news:81Z211Z173Z182Y...@usenet.libero.it...
visto che è un vettore dinamico che si
riempie man mano che lo uso, c'è bisogno di inizializzare i campi?
Non è obbligatorio, ma preferibile, visto che mi sembra che vai ad
incrementare anche zone del vettore mai inizializzate (il numero negativo
che tu vedi nel watch di vstudio è infatti una cella mai inizializzata).

 funzioni matematiche.
Infatti, e' per questo che gli ho proposto valarray (non gli avrei fatto 
la stessa proposta se fosse stato un vettore di stringhe :-)
Dan


ok ho risolto il problema, bastava inizializzare quello che avevo creato...
alla fine ho creato il mio vettore dinamico *color di 16 mln di elementi,
poi per renderlo 3D, se le tre dimensioni erano 256*256*256 inserivo i dati
in questo modo:
color[r+g*256+b*256*256]
il fatto è che credevo che quelli dinamici non li dovessi inizializzare...
grazie per l'aiuto.
ciao
