|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
[C] dichiarazione di array
ciao a tutti,
purtroppo programmando a fasi alterne mi dimentico sempre tutto; espongo il mio problema. Ho dichiarato un array tridimensionale di questo tipo: int mioarray[10][10000][8]; ma viene esaurito lo spazio sullo stack(heap??). Ricordo che esisteva un modo equivalente usando i puntatori ed attraverso la malloc() evitare di usare l'area stack. Una volta creato l'array, questo dovrà essere verificato byte a byte. Codice:
inx x,y,z;
for(x=0; x<10;x++)
for(y=0;y<10000;y++)
for(z=0;z<8;z++)
if(mioarray[x][y][z]) ...........
Ultima modifica di misterx : 05-08-2013 alle 08:08. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12858
|
Facendo un rapido conto stai cercando di allocare spazio sullo stack per 800000 interi, ovvero 3.2M circa.
Credo che di default lo stack sia limitato a 2MB. Fai una prova per curiosità a ridurre quei valori. Comunque puoi adottare una strategia ibrida, usando una matrice di puntatori: Codice:
int* mioarray[10][8];
// inizializzazione
for (int i=0; i < 10; i++)
{
for (int j=0; j < 8; j++)
{
mioarray[i][j] = malloc( 100000 * sizeof(int) );
}
}
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
A colpo d'occhio si direbbe di si, ma faccio più fatica a vederlo. grazie |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
ripensandoci, una conferma; diventa forse così?
Codice:
inx x,y,z;
for(x=0; x<10;x++)
for(z=0;z<8;z++)
for(y=0;y<10000;y++)
if(mioarray[x][z][y]) ...........
grazie |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12858
|
Quote:
Forse per comodità di lettura e di organizzazione potrebbe scrivere così: Codice:
struct riga
{
tipo col[8];
};
struct tabella
{
struct riga* row;
};
int main(void)
{
const int numero_tabelle = 10;
const int numero_righe = 10000;
struct tabella tabs[numero_tabelle];
// inizializzazione tabelle
for (int i=0; i < numero_tabelle; i++)
{
tabs[i].row = malloc(numero_righe * sizeof(struct riga));
}
...
// si può accedere con tabs[i].row[j]->col[k]
}
Ultima modifica di WarDuck : 05-08-2013 alle 15:40. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
ho usato la tua prima soluzione; per la seconda soluzione da te postata, come risulterebbe il codice nel caso di n tabelle diverse in quanto di dimensioni diverse ?
Se il codice divenisse compatto sarebbe una soluzione veramente ottima |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12858
|
Quote:
Perché se sono troppo diverse tra loro potrebbe non avere più senso usare un'array, a meno che tu non le voglia indicizzare per qualche motivo (a me ignoto). |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
non so se risco ad essere più chiaro; in pratica in quelle tabelle ci finiscono i dati presenti in un buffer di dimensioni note.
Posso avere però n buffer di dimensioni diverse e per ognuno devo avere le rispettive tabelle, diversificate, nelle quali inserire i dati dei rispettivi buffer. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:00.




















