Mensagem de erro [RESOLVIDO]

1. Mensagem de erro [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 22/08/2013 - 18:03h

Olá Pessoal.

Ao digitar um código em C, com frequência aparece a mensagem: "Segmentation fault".Qual o tipo de erro que causa essa mensagem? Pois não encontro erro algum.


  


2. MELHOR RESPOSTA

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 22:03h

viana3 escreveu:

Ele desapareceu quando fixei um número para o vetor tempo[100].


Isso, eu não havia reparado. A falha de segmentação ocorre quando o programa tenta alocar na memória o que não deve. Você declarou um vetor sem a quantidade específica de espaço na memória, o compilador não saberá quando de memória o programa precisa para funcionar, então retorna o erro.

3. Re: Mensagem de erro [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 18:16h

Poste o código, são vários os tipos.


4. Re: Mensagem de erro [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 22/08/2013 - 18:19h

#include<stdio.h>
int main(){
int v,n,p;
char nome[50][1000];
float tempo[n],u;
float media;

printf("Digite o número de pilotos \n");
scanf("%i",&n);
printf("Digite os nomes dos pilotos \n");
for(p=0;p<=n;p++){
gets (nome[p]);

}
for(p=0;p<=n;p++){
printf("%s \n",nome[p]);
}
printf("Digite o número de voltas \n");
scanf("%i",&v);

printf("Digite o tempo de cada piloto \n");

for(p=0;p<n;++p){
printf("Digite o tempo do piloto %i \n",p+1);
scanf("%f",&tempo[p]);
}
for(p=0;p<0;++p){
u+=tempo[p];}





return (0);}



5. Re: Mensagem de erro [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 18:38h

viana3 escreveu:

#include<stdio.h>
int main(){
int v,n,p;
char nome[50][1000];
float tempo[n],u;
float media;

printf("Digite o número de pilotos \n");
scanf("%i",&n);
printf("Digite os nomes dos pilotos \n");
for(p=0;p<=n;p++){
gets (nome[p]);

}
for(p=0;p<=n;p++){
printf("%s \n",nome[p]);
}
printf("Digite o número de voltas \n");
scanf("%i",&v);

printf("Digite o tempo de cada piloto \n");

for(p=0;p<n;++p){
printf("Digite o tempo do piloto %i \n",p+1);
scanf("%f",&tempo[p]);
}
for(p=0;p<0;++p){ <--- Veja isso
u+=tempo[p];}





return (0);}





6. Re: Mensagem de erro [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 18:39h

O erro indica a linha? Poste a mensagem de erro.


7. Re: Mensagem de erro [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 22/08/2013 - 19:00h

A mensagem de erro diz: Segmentation fault
process returned 139 (8x0B) execution time: 0.020s


8. Re: Mensagem de erro [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 19:17h

Verificou a linha que destaquei? O único erro que notei foi esse.


9. Re: Mensagem de erro [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 22/08/2013 - 20:12h

Corrigi, mas a mensagem persiste.


10. Re: Mensagem de erro [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 22/08/2013 - 20:21h

rei_astro escreveu:

#include<stdio.h>
int main(){
int v,n,p;
char nome[50][1000];
float tempo[n],u;
float media;

printf("Digite o número de pilotos \n");
scanf("%i",&n);
printf("Digite os nomes dos pilotos \n");
for(p=0;p<=n;p++){ <---- Veja isso!
gets (nome[p]);

}
for(p=0;p<=n;p++){
printf("%s \n",nome[p]);
}
printf("Digite o número de voltas \n");
scanf("%i",&v);

printf("Digite o tempo de cada piloto \n");

for(p=0;p<n;++p){
printf("Digite o tempo do piloto %i \n",p+1);
scanf("%f",&tempo[p]);
}
for(p=0;p<0;++p){ <--- Veja isso
u+=tempo[p];}





return (0);}


Essa variável n tem que ter um valor atribuído em sua declaração, não pode usar para fazer um laço for() dinamicamente.

Ao compilar o código, ele deve saber quando de memória deve alocar, senão pode dar erro na execução e apagar coisas que não deveria da memória RAM.

Tente declarar com um número fixo aí.


11. Re: Mensagem de erro [RESOLVIDO]

wellington
wellingtonsr

(usa Slackware)

Enviado em 22/08/2013 - 21:06h

O programa está acessando uma parte de memória que não deveria.


12. Re: Mensagem de erro [RESOLVIDO]

Moises Viana Felipe
viana3

(usa openSUSE)

Enviado em 22/08/2013 - 21:44h

Mas o "n" representa o número de pilotos de uma corrida, que deve ser digitado pelo usuário ou seja, eu não sei qual o valor de "n" até que o usuário digite.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts