Ciao a tutti...
Come si fa' a creare una matrice dinamica...
Cioe' avento il valore di Righe e Colonne
creare la Matrice (su misura)...
Grazie.
Ciao a tutti...
Come si fa' a creare una matrice dinamica...
Cioe' avento il valore di Righe e Colonne
creare la Matrice (su misura)...
Grazie.
con calloc:
int n = 10; // numero di elementi
int *futuro_array = calloc(n,sizeof(int));
lo puoi usare per qualsiasi tipo (sostituisci il tipo nel sizof).
calloc azzera la memoria allocata.
Drug misuse is not a disease, it is a decision, like the decision to step out in front of a moving car. [...] In this particular life-style the motto is "be happy now because tomorrow you are dying", but the dying begins almost at once, and the happiness is a memory.
...Scusa ma non ho capito bene...
Se io ho due variabili uno per le righe e una per le colonne
come faccio a creare la matrice ?
int righe;
int colonne;
scanf("%d", &righe);
scanf("%d", &colonne);
// Creazione Matrice ?
Calloc e' simile a Malloc ?
per quanto riguarda gli array bidimensionali, fammici pensare un pò :master:
la differenza fra calloc e malloc stà innanzitutto nel fatto che malloc NON azzera la memoria e calloc sì.
calloc alloca un tot di elementi di una grandezza prefissata, malloc prende come argomento i bytes che deve allocare.
puoi usare malloc anche per allocare array (se proprio devi...).
Drug misuse is not a disease, it is a decision, like the decision to step out in front of a moving car. [...] In this particular life-style the motto is "be happy now because tomorrow you are dying", but the dying begins almost at once, and the happiness is a memory.
Ad esempio:
Spero di nn aver sbagliato qualcosa...codice:int colonne,righe; //puntatore all'area di memoria double *dati; // Matrice 5x5 colonne = 5; righe = 5; dati=calloc(colonne*righe,sizeof double); //Riempie di dati for(i=0;i<righe;i++) { for(j=0;j<colonne;j++); { dati[i*colonne + j] = i*j; } } // Re-alloca la memoria colonne = 17; righe = 30; dati=calloc(colonne*righe,sizeof double); //Aggiunge dati for(;i<righe;i++) { for(;j<colonne;j++); { dati[i*colonne + j] = i*j; } }
Ti metto un codice che crea un array tridimensionale dinamico, tutto coi puntatori. Le dimensioni le prende dalla linea di comando quando viene lanciato il programma (in ogni caso sono m, n ed o).
Lo avevo postato anche su un NG, guarda se ti puo essere utile.
In linea generale un array di n dimensioni dinamico lo crei con n-1 cicli for annidati piu volendo uno interno col quale inizializzi gli elementi.
codice:#include <stdio.h> #include <stdlib.h> void main(int argc, char **argv){ int i, j, k, m, n, o, ***myArray; //Verifico che il main() abbia ricevuto 3 parametri if(!(argc == 4)){ fprintf(stdout, "Parametri insufficenti. Bye"); exit (0); } //Acquisisco i valori passati al main m = atoi(*(argv+1)); n = atoi(*(argv+2)); o = atoi(*(argv+3)); //Creo la tabella tridimensionale if(!(myArray = (int ***)malloc(m*sizeof(int **)))) abort(); for(i = 0; i < m; i++){ *(myArray+i) = (int **)malloc(n*sizeof(int *)); for(j = 0; j < n; j++){ *((*(myArray+i))+j) = (int *)malloc(o*sizeof(int)); for(k = 0; k < o; k++) *((*((*(myArray+i))+j))+k) = rand()%100; } } }
Live fast. Troll hard.
Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
Team Lead @Gameloft Barcelona
Va bene questo per la matrice ?
codice:#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, j, k; int m=5, n=6; int **myArray; //Creo la tabella tridimensionale if(!(myArray = (int **)malloc(m*sizeof(int **)))) { printf ("Non c'e' abbastanza memoria...\n"); } // Inserimento manuale Numero for(i = 0; i < m; i++){ *(myArray+i) = (int *)malloc(n*sizeof(int *)); for(j = 0; j < n; j++){ printf ("Numero : "); scanf("%d", &k); *((*(myArray+i))+j) = k; } } // Stampa Matrice for (i=0; i < m; i++) { for (j=0; j < n; j++) { printf ("%5d", myArray[i][j]); } printf ("\n"); } free(myArray); system("PAUSE"); return 0; }
Come faccio a creare un Array Monodimensionale dinamicamente...
L'Array viene creato in una Funzione e fin qui nessun problema...
ma poi come faccio a fare il free dell'array in un altra funzione ?
( Ho usato il Malloc )
Se avete soluzioni migliori dite pure...
Come faccio avendo le variabili righe, colonne ad
allocare subito tutta la matrice ?