V
vittorio
While I can compile the program below under freebsd via a simple:
gcc prog1.c -o prog1
and it runs smoothly, I'm experiencing annoying problems with lcc-win32
under windows xp pro. In fact, under wedit, I can smoothly compile the
program but when I try to execute it it ends with an "abnormal termination"
and a popup complains that:
lcc runtime
Exception 0xc0000005
segment violation
address 0x73d115ce
The weirdness is greater if you think that cutting many lines of the program
and stopping the execution imediatedly after the line
fscanf(fp,"%d%d",&R,&C);
lcc-win32 chokes on the same exception.
Please help
Vittorio
For thoes who wants to have a go here is prog1.c
/* prog1.c */
/* PROGRAMMA 1
Il file matrice.txt (presente nella cartella esame) contiene alcuni dati
cosi' organizzati:
R C
a0,0 a0,1 a0,2 a0,3 ... a0,C-1
a1,0 a1,1 a1,2 a1,3 ... a1,C-1
a2,0 a2,1 a2,2 a2,3 ... a2,C-1
.......
aR-1,0 aR-1,1............ aR-1,C-1
dove R e C indicano il numero di righe e di colonne della matrice che segue,
e l'elemento generico ai,j e' un reale.
Si chiede di scrivere un programma che:
- legga questo file, trasferendo i valori in una matrice di reali (float)
allocata dinamicamente
- allochi una seconda matrice di reali delle stesse dimensioni
- ponga nell'elemento i,,j della seconda matrice la somma di tutta la riga i
e di tutta la colonna j della prima matrice
- scriva la matrice risultante nel file destinazione.txt, in modalita'
testo, con una sola cifra decimale per ogni elemento
Al termine chiudere i file e liberare la memoria. */
#include <stdio.h>
#include <stdlib.h>
void main(void){
int i,j;
int R,C;
/*Leggo matrice.txt,trasferendo i valori in una matrice m1 di reali
allocata dinamicamente*/
FILE *fp;
fp=fopen("matrice.txt","r");
fscanf(fp,"%d%d",&R,&C);
float **m1;
m1=(float**)malloc(sizeof(float*)*R);
for(i=0;i<R;i++)
m1=(float*)malloc(sizeof(float)*C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
fscanf(fp,"%f",&m1[j]);
for(i=0;i<R;i++){
for(j=0;j<C;j++)
printf("%6.1f",m1[j]);
printf("\n");
}
/*Alloco una seconda matrice di reali delle stesse dimensioni*/
float **m2;
m2=(float**)malloc(sizeof(float*)*R);
for(i=0;i<R;i++)
m2=(float*)malloc(sizeof(float)*C);
/*Pongo nell'elemento i,j della seconda matrice la somma di tutta la riga i
e di tutta la colonna j della prima matrice*/
/*r, e c sono 2 vettori in cui pongo la somma dellle righe e colonne */
float *r,
*c;
r=(float*)malloc(sizeof(float)*R);
c=(float*)malloc(sizeof(float)*C);
for(i=0;i<R;i++){
r=0;
for(j=0;j<C;j++)
r+=m1[j];
printf("r %8.1f \n", r);
}
for(j=0;j<C;j++){
c[j]=0;
for(i=0;i<R;i++)
c[j]+=m1[j];
printf("c %8.1f \n", c[j]);
}
for(i=0;i<R;i++)
for(j=0;j<C;j++)
m2[j]=r+c[j];
FILE *fo;
fo=fopen("destinazione.txt","w");
for(i=0;i<R;i++){
for(j=0;j<C;j++)
fprintf(fo,"%6.1f",m2[j]);
fprintf(fo,"\n");
}
/*Chiudo i file e libero la memoria*/
fclose(fp);
fclose(fo);
for(i=0;i<R;i++)
free(m1);
free(m2);
free(r);
free(c);
free(m1);
free(m2);
}
gcc prog1.c -o prog1
and it runs smoothly, I'm experiencing annoying problems with lcc-win32
under windows xp pro. In fact, under wedit, I can smoothly compile the
program but when I try to execute it it ends with an "abnormal termination"
and a popup complains that:
lcc runtime
Exception 0xc0000005
segment violation
address 0x73d115ce
The weirdness is greater if you think that cutting many lines of the program
and stopping the execution imediatedly after the line
fscanf(fp,"%d%d",&R,&C);
lcc-win32 chokes on the same exception.
Please help
Vittorio
For thoes who wants to have a go here is prog1.c
/* prog1.c */
/* PROGRAMMA 1
Il file matrice.txt (presente nella cartella esame) contiene alcuni dati
cosi' organizzati:
R C
a0,0 a0,1 a0,2 a0,3 ... a0,C-1
a1,0 a1,1 a1,2 a1,3 ... a1,C-1
a2,0 a2,1 a2,2 a2,3 ... a2,C-1
.......
aR-1,0 aR-1,1............ aR-1,C-1
dove R e C indicano il numero di righe e di colonne della matrice che segue,
e l'elemento generico ai,j e' un reale.
Si chiede di scrivere un programma che:
- legga questo file, trasferendo i valori in una matrice di reali (float)
allocata dinamicamente
- allochi una seconda matrice di reali delle stesse dimensioni
- ponga nell'elemento i,,j della seconda matrice la somma di tutta la riga i
e di tutta la colonna j della prima matrice
- scriva la matrice risultante nel file destinazione.txt, in modalita'
testo, con una sola cifra decimale per ogni elemento
Al termine chiudere i file e liberare la memoria. */
#include <stdio.h>
#include <stdlib.h>
void main(void){
int i,j;
int R,C;
/*Leggo matrice.txt,trasferendo i valori in una matrice m1 di reali
allocata dinamicamente*/
FILE *fp;
fp=fopen("matrice.txt","r");
fscanf(fp,"%d%d",&R,&C);
float **m1;
m1=(float**)malloc(sizeof(float*)*R);
for(i=0;i<R;i++)
m1=(float*)malloc(sizeof(float)*C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
fscanf(fp,"%f",&m1[j]);
for(i=0;i<R;i++){
for(j=0;j<C;j++)
printf("%6.1f",m1[j]);
printf("\n");
}
/*Alloco una seconda matrice di reali delle stesse dimensioni*/
float **m2;
m2=(float**)malloc(sizeof(float*)*R);
for(i=0;i<R;i++)
m2=(float*)malloc(sizeof(float)*C);
/*Pongo nell'elemento i,j della seconda matrice la somma di tutta la riga i
e di tutta la colonna j della prima matrice*/
/*r, e c sono 2 vettori in cui pongo la somma dellle righe e colonne */
float *r,
*c;
r=(float*)malloc(sizeof(float)*R);
c=(float*)malloc(sizeof(float)*C);
for(i=0;i<R;i++){
r=0;
for(j=0;j<C;j++)
r+=m1[j];
printf("r %8.1f \n", r);
}
for(j=0;j<C;j++){
c[j]=0;
for(i=0;i<R;i++)
c[j]+=m1[j];
printf("c %8.1f \n", c[j]);
}
for(i=0;i<R;i++)
for(j=0;j<C;j++)
m2[j]=r+c[j];
FILE *fo;
fo=fopen("destinazione.txt","w");
for(i=0;i<R;i++){
for(j=0;j<C;j++)
fprintf(fo,"%6.1f",m2[j]);
fprintf(fo,"\n");
}
/*Chiudo i file e libero la memoria*/
fclose(fp);
fclose(fo);
for(i=0;i<R;i++)
free(m1);
free(m2);
free(r);
free(c);
free(m1);
free(m2);
}