PDA

View Full Version : ?Allocazione dinamica matrici?


fant3
26-01-2004, 17:20
Ragazzi ho un problema con l'allocazione delle matrici in C.
Vorrei allocare dinamicamente una matrice ... ma come si fa in C?
Io ci sono riuscito solo tramite una costante. Ho usato :
#define dim 100
per inizializzare la costante a 100 e poi la matrice l'ho inizializzata con:
A[dim][dim]
Esiste un modo migliore per fare la stessa cosa?
Grazie per le risposte, perchè ci saranno risposte vero :D

cionci
26-01-2004, 18:45
Motore di ricerca ;)

http://forum.hwupgrade.it/showthread.php?s=&threadid=603642&highlight=array

fant3
26-01-2004, 18:59
Originariamente inviato da cionci
Motore di ricerca ;)

http://forum.hwupgrade.it/showthread.php?s=&threadid=603642&highlight=array
Si l'avevo letto. Ma se faccio cosi' l'allocazione dinamica:
int i = 0;
int nrow = 0;
int ncol = 0;

/* mi carico nrow e ncol */

int** mat = (int**)malloc(nrow);
for(; i < nrow; i++)
mat[i] = (int*)malloc(ncol);

/* mi ci faccio i miei pastrocchi */

i = 0;
for(; i < nrow; i++)
free(mat[i]);
free mat;

Una volta allocata dinamicamente la matrice la devo passare come parametro di input in una funcion void. Poi il risultato della function sarà uguale a (matrice*vettore1)+vettore2. La matrice la devo passare con i puntatori (come un array monodimensionale)?

cionci
26-01-2004, 19:10
La devi passare così:

void f(int **m);

fant3
26-01-2004, 19:26
la function dovrebbe essere più o meno questa come la devo richiamare?
void function(float x[], float *y[], float **A[], int m, int n)
{
int i, j;
for (i=0; i<n; ++i)
{
for (j=0; j<m; ++j)
{
*y[i] = *A[j][i] * x[i] + *y[i];
}
}
}

poi dopo devo stamparmiil vettore y che contiene il risultato.
x,y ed A sono allocati dinamicamente; m ed n sono la dimensione di righe e colonne.

Racer89
04-11-2008, 15:37
nella parentesi di malloc non ci vuole numerodirighe*sizeof(int)?
grazie

cionci
04-11-2008, 18:24
Nel primo ci vuole nrow * sizeof(int*) nel secondo ncol * sizeof(int)

Cmq è un po' vecchio questo thread ;)

banryu79
04-11-2008, 19:21
Un po' vecchio?
Questo si chiama Necroposting :D