Ciao a tutti.
Come da titolo ho un problema con il passaggio per referenza di una matrica allocata dinamicamente. Vi allego il testo dell'esercizio che dovrei fare:
[*]Un file di testo, il cui nome sia passato al programma da linea di comando, contiene le
informazioni relative ad una matrice di interi. Sulla prima riga del file sono riportate le
dimensioni R e C della matrice stessa. Sulle R righe successive, sono riportati i valori delle C
colonne per ogni data riga. Si assuma che il formato del file sia corretto.
Si scriva un programma che allochi dinamicamente la matrice, effettui la lettura del file e infine
calcoli la somma degli elementi delle diagonali e delle antidiagonali della matrice stessa.
Per quanto riguarda l'allocazione della matrice, si implementino due diverse funzioni. La prima
faccia uso del valore di ritorno per restituire la matrice al main. La seconda faccia invece uso di
parametri passati per riferimento. Nello specifico, si implementino due funzioni i cui prototipi
siano nella forma:
int **alloca2d(...);
e
void alloca2d(int***, ...);[*]
vi alleggo il codice che mi crea grossi grattacapi .
#include <stdio.h>
#include <stdlib.h>
int **alloca2d_0(int ,int );
void alloca2d_1(int ***,int ,int );
int main(int argc,char *argv[])
{
int nr,nc,**p=NULL,i,j;
FILE *f;
if(argc!=2)
{
printf("Errore numero parametri linea di comando.\n");
return EXIT_FAILURE;
}
f=fopen(argv[1],"r");
if(f==NULL)
{
printf("Errore apertura file %s.\n",argv[1]);
return EXIT_FAILURE;
}
fscanf(f,"%d %d",&nr,&nc);
//p=alloca2d_0(nr,nc);
alloca2d_1(&p,nr,nc);
for(i=0;i<nr;i++)
for(j=0;j<nc;j++)
fscanf(f,"%d",&p[i][j]);//Si pianta in questo punto!!
for(i=0;i<nr;i++)
{
for(j=0;j<nc;j++)
printf("%d ",p[i][j]);
printf("\n");
}
fclose(f);
return 0;
}
int **alloca2d_0(int nr,int nc)
{
int **p,i;
p=(int**)malloc(nr*sizeof(int *));
if(p==NULL)
{
printf("Errore allocazione memoria.\n");
exit(-1);
}
for(i=0;i<nr;i++)
{
p[i]=(int *)malloc(nc*sizeof(int));
if(p[i]==NULL)
{
printf("Errore allocazione memoria.\n");
exit(-1);
}
}
return p;
}
void alloca2d_1(int ***p,int nr,int nc)
{
int i,**pt;
pt=(int **)malloc(nr*sizeof(int *));
if(pt==NULL)
{
printf("Errore allocazione memoria.\n");
exit(-1);
}
for(i=0;i<nr;i++)
{
pt[i]=(int *)malloc(nc*sizeof(int));
if(pt[i]==NULL)
{
printf("Errore allocazione memoria.\n");
exit(-1);
}
}
p=&pt;
}
Vi prego aiutatemi non ne vengo a capo. Credo di fare un errore concettuale se cosi fosse me lo spieghereste ?? GRAZIE