Ir ao conteúdo
  • Cadastre-se
Lucas Pelepek

C RESOLVIDO segmentation fault (core dumped) !!!

Posts recomendados

Bom dia,tarde,noite.

 

Estou um tempo sem programar em C, acabei ficando enferrujado.
objetivo do programa:


Faça um programa que permita o cadastro de 5 logins com e-mail (máximo de 40 caracteres) e senha (máximo de 10 caracteres). Depois, peça para um usuário fazer o login digitando e-mail e senha. Se alguma informação for inválida, repetir. Se for certa, mostrar uma mensagem de confirmação de login e encerrar o programa. (não pode usar struct, nesse caso usei matriz).

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define co 2
#define li 2

int main()
{
  char w[41];
  char x[41];
  char email[co][li];
  int c,l,cont;
  
  for (c=1; c <= co; c++) {
    
    printf("Email numero: %d\n",c);
    printf("email e senha:\n");
    
    for (l = 1; l <= li; l++) {
      
      scanf("%s",&email[c][l]);
      
    }
  }
  printf("\ndigite email: ");
  scanf("%s",&x);
  
  for (c=1; c <= co; c++) {
    
    if (!strcmp(x,email[1][c])) {
      
      printf("\ndigite a senha: ");
      scanf("%s",&w);
      
      if (!strcmp(w,email[2][c])) {
        printf("\nBem vindo");
      }
      else
      {
        printf("\nsenha incorreta");
      }
    }
    else
    {
      printf("\nemail não encontrado");
    }
  }
}

porém acontece o "segmentation fault (core dumped)" geralmente quando acontecia isso erá porque eu tinha esquecido um &, mas não é o caso.
problema ocorre aqui:
 

  printf("\ndigite email: ");
  scanf("%s",&x);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
for (l= 1; l <= li; l++){ scanf("%s",&email[c][l]); } 

Olá @Lucas Pelepek Nesse fragmento o programa acessa locais além da memória reservada para o vetor, pois os índices de um arranjo são determinados na lista de valores que vão de 0 até (N-1), onde N é o tamanho definido para o arranjo na declaração.

 

Está claro pra você ??
Aguardando O.k!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, bem, eu alterei pra isso: 
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define co 2
#define li 2

int main()
{
  char w[41];
  char x[41];
  char email[co][li];
  int c,l,cont;

  for (c=0; c < co; c++) {

    printf("Email numero: %d\n",c);
    printf("email e senha:\n");

    for (l = 0; l < li; l++) {

      scanf("%s",&email[c][l]);

    }
  }
  printf("\ndigite email: ");
  scanf("%s",&x);

  for (c=0; c < co; c++) {

    if (!strcmp(x,email[1][c])) {

      printf("\ndigite a senha: ");
      scanf("%s",&w);

      if (!strcmp(w,email[2][c])) {
        printf("\nBem vindo");
      }
      else
      {
        printf("\nsenha incorreta");
      }
    }
    else
    {
      printf("\nemail não encontrado");
    }
  }
}

não sei se foi isso que voce tentou me passar, em qualquer caso, o erro acontece depois dessa parte que você me alertou, ou ainda estou errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

36 minutos atrás, Lucas Pelepek disse:

if (!strcmp(w,email[2][c]))

 

Sim, aquele instante do algoritmo também estava errado, se é o não a origem do problema com certeza em alguma instante será. Aqui acima mais uma vez o mesmo erro: acessando locais não reservados da pilha. Você entendeu a minha explicação anterior ? Enfim não se importe em entende-la

 

Aqui segue uma pagina web para leitura e compreensão do seu problema:

https://en.wikipedia.org/wiki/Segmentation_fault

 

Compartilha as novidades sempre.

O.k!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que entendi, mas parece que não.

 

if (!strcmp(w,email[1][c]))

 

me atrapalhei totalmente na matriz, acho que tenho que refazer.

ainda core dump.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Lucas Pelepek disse:

if (!strcmp(w,email[1][c]))

 

Esta passagem de caractere como argumento para um parâmetro char* vai causar erro de acesso violado na memória. Ou seja, agora não é mais o arranjo, e sim, o argumento.

 

Documente seus códigos: Um trecho de código nem sempre é o bastante, e sendo de linguagem C, nunca será, o que faz de C uma linguagem de documentação obrigatória.

 

Preste atenção nos sinais de alerta emitidos pelo compilador; pois um erro dessa magnitude não passa despercebido por uma Interface bem configurada. 

 

 

4 horas atrás, Lucas Pelepek disse:

ainda core dump.

Porque você continua a acessar ponteiros/locais da memoria que não podem ser acessados.

 

 

4 horas atrás, Lucas Pelepek disse:

me atrapalhei totalmente na matriz, acho que tenho que refazer.

Desta vez comunica suas intenções por meio de linhas de código comentadas, não precisa ser muito, um linha já basta.

 

Não tenha medo de perguntar, questione sempre, na aula em toda parte O.k! 

Recomendo este site para auto-aprendizagem: https://www.cprogressivo.net/ 

Um excelente apostila online, com vários exercício resolvidos ...

 

 

Pode confiar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabou que no final podia usar struct, dai pulei a matriz, rsrsrs, mas valeu pela ajuda. 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Eletrônica

PROMOÇÃO DE QUARENTENA

Aproveite o isolamento social para aprender eletrônica!
De R$ 39,90 por apenas R$ 19,90
Só até as 23h59min desta sexta-feira 10/04/2020

CLIQUE AQUI E COMPRE AGORA MESMO!