2010-12-29 14 views
6

Stavo cercando di creare un array 2D in un blocco di memoria continua, ma è in grado di fornire un blocco M continuo, ciascuno di dimensione N.creazione di array bidimensionale dinamicamente nel blocco di memoria continua

int **arr = new int*[M]; 
for (int i = 0 ; i < M ; i++) 
{ 
    arr[i] = new int[N]; 
} 

Come creare un array 2D in un blocco di memoria permanente?

+4

** Per favore ** non farlo da soli. Usa boost :: multi_array. –

+5

Sì, non imparo nulla di nuovo, solo codice come scimmia, per favore. – bartimar

risposta

13
int *buffer=new int[M*N]; 
int **arr=new int*[M]; 
for(int i=0;i<M;++i) 
    arr[i]=buffer+i*N; 

In realtà non è necessario memorizzare i puntatori di arr, possono essere calcolati quando necessario.

+1

Questo approccio funzionerebbe se si vuole creare una matrice di oggetti di qualche classe? – Nawaz

+1

Non vedo alcun problema qui. I costruttori sono chiamati una volta. – maxim1000

+1

Sì. Ho notato che. A proposito, stavo pensando, possiamo farlo funzionare per costruttore non predefinito, dove ogni oggetto nell'array dovrebbe essere inizializzato con valori diversi? – Nawaz

Problemi correlati