ciccio84
21-06-2007, 10:40
ciao,
scusate se vi disturbo ma ho un problema. ieri ho scritto, compilato ed eseguito decine di volte il seguente programma senza alcun intoppo.oggi provando ad eseguirlo nuovamente sullo stesso computer(e anche su un altro) continuo a ricevere un messaggio di errore al termine dell'esecuzione(pur non avendo apportato alcuna modifica al programma) ed il file denominato errori rimane vuoto.facendo il debug il programma si blocca ogni volta in un punto diverso ma sempre durante la scrittura del file errori.txt.è anche apparso l'errore :
"Il programma ha causato una violazione di accesso(errore di segmentazione)"
qualcuno sa dirmi a cosa può essere dovuto tale problema?
vi ringrazio in anticipo per il vostro aiuto.
#include <stdio.h>
#include<time.h>
main()
{
int A, B, c, i, j, k, l,x,h, cicli, s, n_tempi, ciclo_in,temp,n_err,somma,t,z;
srand(time(NULL));
printf("Durata simulazione in ns?\n ");
scanf("%d", &B);
cicli=B/20;
printf("N di cicli:%d\n",cicli);
x=cicli * 1024;
controllo2:
printf("Numero di errori da inserire?( max %d)\n ",x);
scanf("%d", &A);
if (A>x)
{
printf("Numero errori troppo elevato\n");
goto controllo2;
}
controllo:
n_tempi=rand() % (cicli+1);
if (n_tempi > A)
goto controllo;
if (n_tempi ==0)
goto controllo;
if (n_tempi<(A/1024))
goto controllo;
printf("Numero di iniezioni:%d\n",n_tempi);
FILE *fp,*fp2;
if ((fp = fopen("errori.txt", "w")) ==NULL)
{
printf("Error opening file errori\n");
system("PAUSE");
exit(1);
}
if ((fp2 = fopen("tempi.txt", "w")) ==NULL)
{
printf("Error opening file tempi\n");
system("PAUSE");
exit(1);
}
int tempo_in[n_tempi];
for (s=0;s<n_tempi;s++)
{
casuale:
ciclo_in=rand() % cicli;
if (ciclo_in==0)
goto casuale;
tempo_in[s]=(ciclo_in * 20);
for (j=0;j<(s-1);j++)
{
if (tempo_in[j]==tempo_in[s])
goto casuale;
}
}
/* ordina il vettore */
for (i=0; i<n_tempi; i++)
{
/* confronta ciascuno dei valori... */
for (j=i+1; j<n_tempi; j++) /* ...con tutti i successivi */
{
if (tempo_in[j] < tempo_in[i]) /* e se uno dei successivi e' minore */
{ /* lo scambia con esso */
temp = tempo_in[i];
tempo_in[i] = tempo_in[j];
tempo_in[j] = temp;
}
}
}
for (s=0;s<n_tempi;s++)
{
fprintf(fp2,"%d\n",tempo_in[s]);
}
fclose(fp2);
int y[n_tempi];
for (i = 0; i < n_tempi; i++)
y[i] = 1;
for (i = (A - n_tempi); i > 0;)
{
int j = rand() % n_tempi;
// int j = (int)(((float)rand() / (float)RAND_MAX) * (float)N);
if (y[j] < 1024)
{
y[j] += 1;
i -= 1;
}
}
somma=0;
n_err=0;
for (i=0;i<n_tempi;i++)
{
printf("%d\n",y[i]);
somma += 1;
n_err += y[i];
}
printf("%d\n",somma);
printf("%d\n",n_err);
int arr[n_tempi][8][128];
gen:
for (i=0;i<n_tempi;i++)
{
for (j=0;j<8;j++)
{
for (k=0;k<128;k++)
arr[i][j][k]=0;
}
}
for (i=0;i<n_tempi;i++)
{
for (h=0;h<y[i];)
{
j=rand() % 8;
k=rand() % 128;
if (arr[i][j][k]==0)
{
arr[i][j][k]=1;
h+=1;
}
}
}
for (i=0;i<n_tempi;i++)
{
for (j=0;j<8;j++)
{
for (k=0;k<128;k++)
{
fprintf(fp,"%d",arr[i][j][k]);
if (k==15 || k==31 || k==47 || k==63 || k==79 || k==95 || k==111)
fprintf(fp,"\t");
}
fprintf(fp,"\n");
}
}
fclose(fp);
system("PAUSE");
return 0;
}
scusate se vi disturbo ma ho un problema. ieri ho scritto, compilato ed eseguito decine di volte il seguente programma senza alcun intoppo.oggi provando ad eseguirlo nuovamente sullo stesso computer(e anche su un altro) continuo a ricevere un messaggio di errore al termine dell'esecuzione(pur non avendo apportato alcuna modifica al programma) ed il file denominato errori rimane vuoto.facendo il debug il programma si blocca ogni volta in un punto diverso ma sempre durante la scrittura del file errori.txt.è anche apparso l'errore :
"Il programma ha causato una violazione di accesso(errore di segmentazione)"
qualcuno sa dirmi a cosa può essere dovuto tale problema?
vi ringrazio in anticipo per il vostro aiuto.
#include <stdio.h>
#include<time.h>
main()
{
int A, B, c, i, j, k, l,x,h, cicli, s, n_tempi, ciclo_in,temp,n_err,somma,t,z;
srand(time(NULL));
printf("Durata simulazione in ns?\n ");
scanf("%d", &B);
cicli=B/20;
printf("N di cicli:%d\n",cicli);
x=cicli * 1024;
controllo2:
printf("Numero di errori da inserire?( max %d)\n ",x);
scanf("%d", &A);
if (A>x)
{
printf("Numero errori troppo elevato\n");
goto controllo2;
}
controllo:
n_tempi=rand() % (cicli+1);
if (n_tempi > A)
goto controllo;
if (n_tempi ==0)
goto controllo;
if (n_tempi<(A/1024))
goto controllo;
printf("Numero di iniezioni:%d\n",n_tempi);
FILE *fp,*fp2;
if ((fp = fopen("errori.txt", "w")) ==NULL)
{
printf("Error opening file errori\n");
system("PAUSE");
exit(1);
}
if ((fp2 = fopen("tempi.txt", "w")) ==NULL)
{
printf("Error opening file tempi\n");
system("PAUSE");
exit(1);
}
int tempo_in[n_tempi];
for (s=0;s<n_tempi;s++)
{
casuale:
ciclo_in=rand() % cicli;
if (ciclo_in==0)
goto casuale;
tempo_in[s]=(ciclo_in * 20);
for (j=0;j<(s-1);j++)
{
if (tempo_in[j]==tempo_in[s])
goto casuale;
}
}
/* ordina il vettore */
for (i=0; i<n_tempi; i++)
{
/* confronta ciascuno dei valori... */
for (j=i+1; j<n_tempi; j++) /* ...con tutti i successivi */
{
if (tempo_in[j] < tempo_in[i]) /* e se uno dei successivi e' minore */
{ /* lo scambia con esso */
temp = tempo_in[i];
tempo_in[i] = tempo_in[j];
tempo_in[j] = temp;
}
}
}
for (s=0;s<n_tempi;s++)
{
fprintf(fp2,"%d\n",tempo_in[s]);
}
fclose(fp2);
int y[n_tempi];
for (i = 0; i < n_tempi; i++)
y[i] = 1;
for (i = (A - n_tempi); i > 0;)
{
int j = rand() % n_tempi;
// int j = (int)(((float)rand() / (float)RAND_MAX) * (float)N);
if (y[j] < 1024)
{
y[j] += 1;
i -= 1;
}
}
somma=0;
n_err=0;
for (i=0;i<n_tempi;i++)
{
printf("%d\n",y[i]);
somma += 1;
n_err += y[i];
}
printf("%d\n",somma);
printf("%d\n",n_err);
int arr[n_tempi][8][128];
gen:
for (i=0;i<n_tempi;i++)
{
for (j=0;j<8;j++)
{
for (k=0;k<128;k++)
arr[i][j][k]=0;
}
}
for (i=0;i<n_tempi;i++)
{
for (h=0;h<y[i];)
{
j=rand() % 8;
k=rand() % 128;
if (arr[i][j][k]==0)
{
arr[i][j][k]=1;
h+=1;
}
}
}
for (i=0;i<n_tempi;i++)
{
for (j=0;j<8;j++)
{
for (k=0;k<128;k++)
{
fprintf(fp,"%d",arr[i][j][k]);
if (k==15 || k==31 || k==47 || k==63 || k==79 || k==95 || k==111)
fprintf(fp,"\t");
}
fprintf(fp,"\n");
}
}
fclose(fp);
system("PAUSE");
return 0;
}