allocazione dinamica in C

Messaggioda wedge » 09/12/2005, 20:31

non riesco ad allocare dinamicamente lo spazio per una matrice per crearne una con delle dimensioni scelte dall'utente...

per un vettore faccio così...

Codice:
int main ()
{
int *vettore;       /* dichiarazione del vettore */
int n;
(...)
printf("dimmi di quanti elementi vuoi il vettore");
scanf("%d",&n);       /* l'utente mi dice la dimensione del vettore*/
vettore=malloc(n*sizeof(int))  /*allocazione di spazio*/
(...)
}



ma per una matrice come funziona???? istintivamente farei:

Codice:

int main ()
{
int *matrix;       /* dichiarazione*/
int n;
int m;
(...)
printf("dimmi di quante righe e colonne vuoi la matrice");
scanf("%d %d",&n,&m);       /* l'utente mi dice le dimensioni della matrice*/
matrix=malloc(n*m*sizeof(int))  /*allocazione di spazio*/
(...)
}


purtroppo il compilatore non me l'accetta...

qualche suggerimento? grazie mille :D
Ultima modifica di wedge il 09/12/2005, 20:51, modificato 1 volta in totale.
"Tre quarks per mister Murray!" (James Joyce, Finnegan's Wake)

Parco Sempione, verde e marrone, dentro la mia città.
Avatar utente
wedge
Cannot live without
Cannot live without
 
Messaggio: 229 di 3831
Iscritto il: 12/10/2004, 19:14
Località: Leiden, NL

Messaggioda Marvin » 09/12/2005, 20:36

non so perchè ma qualcosa mi dice che il problema è quando fai la malloc...che errore ti da?
Avatar utente
Marvin
Average Member
Average Member
 
Messaggio: 207 di 521
Iscritto il: 28/07/2005, 11:30
Località: Milano

Messaggioda wedge » 09/12/2005, 20:41

mi dice qualcosa come "incompatible type for array", esattamente alla linea corrispondente al malloc, come hai intuito!
"Tre quarks per mister Murray!" (James Joyce, Finnegan's Wake)

Parco Sempione, verde e marrone, dentro la mia città.
Avatar utente
wedge
Cannot live without
Cannot live without
 
Messaggio: 230 di 3831
Iscritto il: 12/10/2004, 19:14
Località: Leiden, NL

Re: allocazione dinamica in C

Messaggioda signor.nessuno » 09/12/2005, 20:49

Immagine
Ultima modifica di signor.nessuno il 27/12/2005, 00:28, modificato 1 volta in totale.
signor.nessuno
Junior Member
Junior Member
 
Messaggio: 190 di 240
Iscritto il: 01/01/2005, 23:30
Località: Italy

Re: allocazione dinamica in C

Messaggioda wedge » 09/12/2005, 20:51

signor.nessuno ha scritto:
wedge ha scritto:
Codice:
scanf("%d %d", n, m);       /* l'utente mi dice le dimensioni della matrice*/


Forse perché mancano gli operatori indirizzo per le due variabili?


pardon, questo è un refuso della scrittura del post. correggo.
"Tre quarks per mister Murray!" (James Joyce, Finnegan's Wake)

Parco Sempione, verde e marrone, dentro la mia città.
Avatar utente
wedge
Cannot live without
Cannot live without
 
Messaggio: 233 di 3831
Iscritto il: 12/10/2004, 19:14
Località: Leiden, NL

Messaggioda signor.nessuno » 09/12/2005, 20:59

Immagine
Ultima modifica di signor.nessuno il 27/12/2005, 00:29, modificato 1 volta in totale.
signor.nessuno
Junior Member
Junior Member
 
Messaggio: 191 di 240
Iscritto il: 01/01/2005, 23:30
Località: Italy

Messaggioda Marvin » 10/12/2005, 13:01

Predila con le pinze eh..se tu devi creare un matrice n*m devi per esempio accostare n righe da m elementi ciascuna,giusto?
Ricordati che n,m sono SCALARI (integer) e andando a fare n*m hai uno SCALARE,non un vettore.
Ora provo a vedere sui miei appunti di C se trovo qlc relativa alla malloc per generare la matrice.
Forse è per questo che ti da errore.

Marvin
Avatar utente
Marvin
Average Member
Average Member
 
Messaggio: 209 di 521
Iscritto il: 28/07/2005, 11:30
Località: Milano

Messaggioda luciano79 » 12/12/2005, 17:34

è da anni che non utilizzo il c...
credo che tu debba fare così

matrix=(int*)malloc(n*m*sizeof(int));
luciano79
New Member
New Member
 
Messaggio: 22 di 53
Iscritto il: 14/11/2005, 16:33

Messaggioda ilprincipe1984 » 12/01/2006, 19:10

potrei sbagliarmi ma da qualche vago ricordo mi pare che tu abbia sbagliato funzione...quando vuoi definire la taglia utilizzi calloc, quando utilizzi malloc devi passare il numero di elementi per la taglia, quindi n*sizeof(int) significa allocami n elementi di tipo int, non allocami uno spazio di memoria pari a... ed è per questo che con il cast dovresti risolvere..invece se utilizzi calloc puoi passare la taglia forzata..o qualcosa del genere...fregandotene di tutto
ilprincipe1984
Starting Member
Starting Member
 
Messaggio: 4 di 9
Iscritto il: 12/01/2006, 17:44
Località: Grenoble/Torino/Cagliari

Messaggioda giacor86 » 14/01/2006, 11:43

ma scusa, fai una bella lista dinamica...
giacor86
Advanced Member
Advanced Member
 
Messaggio: 480 di 2455
Iscritto il: 20/02/2005, 11:32

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite