|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2010
Messaggi: 24
|
[C] Help allocazione dinamica
Ciao a tutti!!!
sono nuovo nel forum quindi chiedo scusa preventivamente x qualsiasi errore da me commesso passo subito a porvi il mio quesito: i due codici posti di seguito per il calcolo della diagonale di una matrice sono entrambi esatti vero??? se si, fanno entrambi le stesse identiche cose anche se in maniera differente giusto??? codice 1: Codice:
int diag(int n)
{
int mat[n][n], i, j, sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
mat[i][j]=5;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j)
sum+=mat[i][i];
}
return sum;
}
Codice:
int diag(int n)
{
int **mat,i,j,sum=0;
mat=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
mat[i]=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
mat[i][j]=5;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j)
sum+=mat[i][i];
}
return sum;
}
Ultima modifica di Cisky89 : 12-06-2010 alle 23:07. |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Quote:
Il secondo codice è preferibile. |
||
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2010
Messaggi: 24
|
Ok...grazie mille per l'aiuto!!!
Ma è preferibile utilizzare malloc o cmq l'allocazione dinamica solo x il fatto che se non conosco la dimensione della matrice a priori non la posso passare come parametro a una funzione, o anche per altre ragioni??? Ultima modifica di Cisky89 : 12-06-2010 alle 23:25. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Per passarla puoi usare dei puntatori non importa sapere le dimensioni.
Invece è meglio allocare dinamicamente nell'heap piuttosto che nello stack perchè quest'ultimo ha dei limiti di dimensione massima più restrittivi dell'heap. Basta provare ad allocare una grande matrice nello stack per avere un errore e ricevere SIGSEGV. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2010
Messaggi: 24
|
ok...XD grazie per l'aiuto!!!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:12.




















