| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  23-04-2008, 15:52 | #1 | 
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6245
				 | 
				
				[C] Allocazione dinamica
			 
		Ciao, ho un dubbio sull'allocazione dinamica. Dunque se io alloco una matrice statica, e poi una matrice dinamica, le due matrici sono mappate in memoria esattamente allo stesso modo? O quella dinamica ha un'allocazione differente? Ve lo chiedo perché, in una chiamata MPI_Send, se scrivo: Codice: MPI_Send(mat, 100*100, MPI_INT, 1, 0, MPI_COMM_WORLD); Quindi in poche parole il mio dubbio è il seguente: se la matrice è allocata dinamicamente, le righe in memoria non sono consecutive. Ma se è allocata staticamente, lo sono? Ultima modifica di Unrue : 23-04-2008 alle 16:08. | 
|   |   | 
|  23-04-2008, 16:34 | #2 | 
| Registered User Iscritto dal: Jul 2004 Città: Roma 
					Messaggi: 67
				 | 
		adesso non ricordo tanto bene visto ke è da un pò ke non programmo   però mi sembra di ricordare ke x l'allocazione dinamica di una matrice prima di poterci andare a lavorare sopra devi allocarla tu con un tipo di variabile e la dimensione della stessa in modo ke quando vai a scriverci la matrice sia già creata in memoria...il segmentation fault è causato dal fatto ke và a a scrivere op leggere su uno spazio di memoria non dichiarato.....prova a vedere il comando malloc, realloc.. | 
|   |   | 
|  23-04-2008, 16:54 | #3 | ||
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6245
				 | Quote: 
  Quote: 
 Codice: int matrice[100][100] Ultima modifica di Unrue : 23-04-2008 alle 17:01. | ||
|   |   | 
|  23-04-2008, 16:56 | #4 | |
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6245
				 | Quote: 
 | |
|   |   | 
|  23-04-2008, 17:17 | #5 | 
| Registered User Iscritto dal: Jul 2004 Città: Roma 
					Messaggi: 67
				 | 
		ritornando cmq al tuo dubbio penso ke nel caso di allocazione statica la matrice non sia allocata consecutivamente in memoria mentre x la dinamica si, cmq puoi fare un pò di prove dichiarando la matrice prima in un modo e poi nell'altro e fare una lettura all'interno della matrice facendoti restituire l'indirizzo di memoria
		 | 
|   |   | 
|  23-04-2008, 21:13 | #6 | 
| Senior Member Iscritto dal: May 2004 Città: Napoli 
					Messaggi: 773
				 | 
		Indifferentemente da se dichiari "int array[10];" o "int array[10][10];" array è comunque un puntatore a intero... Allocando staticamente sei ovviamente sicuro in entrambi i casi che tutti gli elementi della matrice/vettori sono in spazi attigui... Allocando dinamicamente invece dipende dalla "munnezza" che hai nell'area heap... quindi non puoi dire con certezza se sarà tutto allocato in zone attigue... è facile che non sia così... in ogni caso, fai conto che anche allocando dinamicamente puoi creare una bella matrice a partire da un puntatore a intero, non c'è bisogno di scomodare puntatori a puntatori a ...   
				__________________ If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg | 
|   |   | 
|  23-04-2008, 22:51 | #7 | |
| Senior Member Iscritto dal: Jan 2005 Città: Roma 
					Messaggi: 481
				 | Quote: 
 Ecco perchè va inviato un blocco di memoria allocato staticamente. | |
|   |   | 
|  24-04-2008, 14:20 | #8 | |
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6245
				 | Quote: 
 | |
|   |   | 
|  24-04-2008, 14:22 | #9 | |
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6245
				 | Quote: 
  Per caso sapete se lo stesso discorso vale anche in Fortran? | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 03:04.









 
		 
		 
		 
		








 
  
 



 
                        
                        










