Ho fatto qualche cambiamento ed ora nn c'è + l'errore di segmentazione sul fread.
Ecco il nuovo codice:
#include<stdio.h>
#include<stdlib.h>
void alloca_matrice(int***,int*,int*);
void riempi_matrice(int***,int,int);
void stampa(int**,int);
int main()
{
int** matrice=NULL;
int dimensione=0;
int elementi=0;
alloca_matrice(&matrice,&dimensione,&elementi);
riempi_matrice(&matrice,dimensione,elementi);
stampa(matrice,dimensione);
system("pause");
return 0;
}
void alloca_matrice(int***m,int*dim,int*num)
{
FILE* fp=NULL;
int i;
int end=0;
fp=fopen("seq.dat","rb");
fseek(fp,0,SEEK_END);
end=ftell(fp);
fseek(fp,0,SEEK_SET);
while((ftell(fp))!=end)
{
(*num)++;
fseek(fp,sizeof(int),SEEK_CUR);
}
*dim=((*num)/2);
fseek(fp,(*dim)*sizeof(int),SEEK_SET);
fread(dim,sizeof(int),1,fp);
if(((*dim)*(*dim))<(*num))
{
printf("Il file contiene più interi di quanti ne puo' contenere la matrice");
exit(1);
}
else
{
printf("%d/n%d/n",*dim,*num);
*m=malloc((*dim)*sizeof(int));
for(i=0;i<(*dim);i++);
{
(*m)[i]=malloc((*dim)*sizeof(int));
}
}
fclose(fp);
}
void riempi_matrice(int*** m,int dim,int num)
{
FILE*fp=NULL;
int i=0;
int j=0;
int flag=0;
fp=fopen("seq.dat","rb");
while(flag<num)
{
if(flag==((num/2)+1))
{
flag++;
}
else
{
fread(&m[i][j],sizeof(int),1,fp);
printf("\n%d %d %d %d",i,j,num,flag);
flag++;
if(j<dim)
{
j++;
}
else
{
i++;
j=0;
}
}
}
/*for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
if(flag==((num/2)+1)||flag<num)
{
if(flag>=num)
{
break;
}
else
{
flag++;
}
}
else
{
fread(&m[i][j],sizeof(int),1,fp);
flag++;
printf("\n%d %d %d %d",i,j,num,flag);
}
}
} */
for(;i<dim;i++)
{
for(;j<dim;j++)
{
(*m)[i][j]=0;
printf("\n%d %d %d %d",i,j,num,flag);
}
}
fclose(fp);
}
void stampa(int** m,int dim)
{
int i,j;
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
printf("%d",m[i][j]);
}
printf("/n");
}
}
Ho un errore in questa linea di codice
(*m)[i][j]=0;
e sulla terza funzione, la stampa, nel passaggio della matrice