Pular para o conteúdo

Erro falha de segmentação [RESOLVIDO]

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. Erro falha de segmentação [RESOLVIDO]

Enviado em 20/05/2022 - 21:29h

Olá comunidade, criei um código em C que tem como função fazer uma equação do segundo grau, eu fiz o código mas na hora de compilar mostra "Falha de segmentação (imagem do núcleo gravada)", me deem uma luz. Eis o código em questão:

# include <stdio.h>
# include <math.h>
int main()
{
float a, b, c, delta, raiz1, raiz2;
scanf("%f", &a);
scanf("%f", &b);
scanf("%f", &c);
delta = (b*b)-4*a*c;
raiz1 = (-b + sqrt(delta))/(2*a);
raiz2 = (-b - sqrt(delta))/(2*a);
if (a != 0)
{
if (delta < 0)
{
printf("Não existem raízes reais");
}
if (delta == 0)
{
printf("Raiz 1: %0.2f", raiz1);
}
else if (delta > 0)
{
printf("Raiz 1: %0.2f\n", raiz1);
printf("Raiz 2: %0.2f", raiz2);
}
}
else
{
printf("Raiz: %0.2f", -c/b);
}
}




eu compilei com o gcc -shared por causa da biblioteca math.h

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Erro falha de segmentação [RESOLVIDO]

Enviado em 21/05/2022 - 06:15h

nixtavo escreveu:

Olá comunidade, criei um código em C que tem como função fazer uma equação do segundo grau, eu fiz o código mas na hora de compilar mostra "Falha de segmentação (imagem do núcleo gravada)", me deem uma luz.


Erro de segmentação na hora de compilar? Muito estranho!

Tirando alguns aspectos estéticos (tais como não imprimir quebras de linha após mensagens) e o fato de não seguir o padrão na hora de especificar os argumentos de main() (que a seção 5.1.2.2.1 do padrão do C diz que tem de ser declarada como “int main(void)” ou “int main(int argc, char **argv)”), seu código, em si, não tem nada que provoque SIGSEGV durante a execução, e muito menos deveria levar o compilador a gerar SIGSEGV.

Se o SIGSEGV vem realmente na hora de compilar, ou você tem uma versão completamente bugada do compilador, que provavelmente seria resolvida com uma atualização ou reinstalação, ou pode estar com algum problema de corrupção de dados no seu computador, quer seja no disco, quer na hora de carregar o executável do compilador para a memória (e eu digo isso por experiência própria: eu tive um micro que, quando esquentava um pouquinho a mais que o normal, começava a corromper coisas na memória; quando os programa simplesmente capotavam em razão disso, ainda era menos mal, mas o pior mesmo é quando algum dado corrompido acabava sendo gravado em disco já com erro na origem...).

eu compilei com o gcc -shared por causa da biblioteca math.h


Nesse caso, -shared não deveria fazer muita diferença. O que você precisaria mesmo utilizar seria -lm (e.g. “gcc -Wextra -Werror -pedantic-errors -std=c11 -O2 prog.c -o prog -lm”).



... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

3. Re: Erro falha de segmentação [RESOLVIDO]

Enviado em 21/05/2022 - 09:03h

nixtavo escreveu:
eu compilei com o gcc -shared por causa da biblioteca math.h

Só uma observação com o que o Paulo disse mais esse código.
Aqui eu compilei, porém, pra linkar com a math tem que usar -lm e não -shared como parâmetro:
gcc -o programa programa.c -lm

O que talvez o criador do tópico chame de "falha de segmentação" é apenas o aviso referente a não achar na linkagem a math e os pontos que o Paulo apontou.
Daí a confusao entre uma falha de segmentação e uma falha na compilação (erro no linker).


4. Re: Erro falha de segmentação [RESOLVIDO]

Enviado em 21/05/2022 - 11:35h


Resolvido, o problema é que tinha que compilar usando o parâmetro lm ao invés de shared. Obrigado a todos

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder