Jump to content

SIGSEGV - segmentation fault


AprendizZ
 Share

Recommended Posts

Caros amigos,

Criei um programa que lê um ficheiro com números e transforma-os num array.

Depois o resultado são algumas operações feitas com esse array: soma dos elementos,

máximo, mínimo, etc.

O problema é no final a compilação é correcta e os testes correm bem mas depois quando

submeto num sistema de avaliação dá-me o erro SIGSEGV, ou seja, segmentation fault.

Pelo que entendo tem a ver com a ocupação de um endereço de memória já previamente

ocupado, não? Então como posso solucionar isto? O que poderá estar o meu programa a

fazer para causar este erro?

Obrigado.

Link to comment
Share on other sites

Ei-lo:

#include <stdio.h>

#define MAX_AVENUES 100
int rats[MAX_AVENUES];
int n_avenues;

void read_rats (FILE *f, char *format)
{
int x = 0;
fscanf(f, format, &n_avenues);
while (fscanf(f, format, &rats[x]) != EOF)
	x++;
}

int rats_total (int *a, int n)
{
int i;
int t = 0;
for(i = 0; i < n; i++)
	t += a[i];
return t;
}

double rats_average (int *a, int n)
{
return (double) rats_total(a,n) / n;
}

int rats_max (int *a, int n)
{
int i;
int mx = a[0];
for(i = 1; i < n; i++)
	if (mx < a[i])
		mx = a[i];
return mx;
}

int rats_min (int *a, int n)
{
int i;
int mi = a[0];
for(i = 1; i < n; i++)
	if (mi > a[i])
		mi = a[i];
return mi;
}

void rats_read_write (void)
{
int x, y, z;
double w;
read_rats(stdin, "%d");
x = rats_total(rats, n_avenues);
printf("%d ", x);
w = rats_average(rats, n_avenues);
printf("%.2f ", w);
y = rats_max(rats, n_avenues);
printf("%d ", y);
z = rats_min(rats, n_avenues);
printf("%d\n", z);
}

int main (void)
{
rats_read_write();
return 0;
}
Link to comment
Share on other sites

Quando compilo e executo o programa no Visual C corre tudo bem. Sejam testes vindos

do projecto, sejam testes inventados por mim. Mas quando submeto num avaliador,

neste caso o sistema Mooshak, este deve fazer outros testes onde me responde

Runtime Error com a popup (test T6): SIGSEGV.

Fiz uma pesquisa e deduzi que o programa deve estar a tentar ocupar um endereço

de memória que já está ocupado. Neste caso penso que poderá ter a ver com as

variáveis globais + variável simbólica, mas se assim for como é que corre bem nos

testes locais que faço?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.