Erro falha de segmentação [RESOLVIDO]

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

Gustavo Henrique Nascimento de Chiato
nixtavo

(usa Ubuntu)

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


  


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

Paulo
paulo1205

(usa Ubuntu)

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]

Samuel Leonardo
SamL

(usa XUbuntu)

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]

Gustavo Henrique Nascimento de Chiato
nixtavo

(usa Ubuntu)

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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts