PDA

Visualizza la versione completa : [C] Allocazione dinamica e inizializzazione di una matrice 2D


gulpgiulia
14-11-2006, 13:04
Ciao a tutti!
Come da oggetto.
Copio il codice:


////******************** Allocazione dinamica matrice 2D **********************//
int ncol = 4;
int nline = 16;
int ii,jj;

double **SIMdata;
SIMdata = (double**) malloc( nline * sizeof(double*) );
for(ii=0; ii<nline; ii++)
{
SIMdata[ii] = (double*) malloc( ncol * sizeof(double*) );
}
// SIMdata[nline][ncol]=[0...nline-1][0...ncol-1]

//************************* Inizializzazione SIMdata **************************//

// double SIMdata [nline][ncol];

for(ii=0;ii<nline;ii++)
{
for(jj=0;jj<ncol;jj++)
{
SIMdata[ii][jj]=0.; // INIZIALIZZAZIONE
printf("%lf\n",SIMdata[ii][jj]);
}// for(j ...)
}// for(i ...)
Apparentemente l'allocazione e' eseguita correttamente, qualunque sia nline. La seconda parte, invece, si "intoppa" se nline e' "grande" (ordine 1000). La cosa strana e' che se io inizializzo la matrice in maniera diretta (eliminando l'allocazione dinamica e introducendo un'istruzione tipo "double SIMdata [nline][ncol];"), l'inizializzazione e' eseguita correttamente per qualunque nline.
C'e un errore nel mio codice, oppure l'allocazione dinamica ha dei limiti?
Grazie

LeleFT
14-11-2006, 13:42
Attenzione:


for(ii=0; ii<nline; ii++)
{
SIMdata[ii] = (double*) malloc( ncol * sizeof(double) );
}

La parte in grassetto. Avevi scritto sizeof(double *).


Ciao. :ciauz:

gulpgiulia
14-11-2006, 13:59
Grazie!
Sospettavo un errore banale... :D

XWolverineX
14-11-2006, 19:23
sizeof(double*)

Il compilatore la interpreta come grandezza di un puntatore a double?

MItaly
14-11-2006, 19:26
Esatto; questo valore tra l'altro puņ essere usato per capire in che ambiente sta girando il compilatore (2=>16 bit; 4=>32 bit; 8=>64 bit).

Loading