Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
rjort_nine

Segmentation fault (core dumped), funcao atexit

Recommended Posts

tenho o seguinte codigo usando apenas pra analisar a funcao 'atexit'.... estou a 1 hora analisando e reanalisando o codigo e nao to sabendo o que fiz de errado T_T #help

ao executar-lo o erro é esse: 'segmentation fault (core dumped)'

 

#include <stdio.h>
#include <stdlib.h>

//numero maximo de callbacks permitidos
#define MAX_CALLBACKS 8

//matriz de ponteiros com os callbacks
static void *callbacks[MAX_CALLBACKS];
static int callbacks_pos = 0;

//implementacao de my_atexit ()
static int my_atexit ( void (*func) (void) )
{
  //caso haja posicao disponivel na matriz, guarda o ponteiro
  if ( callbacks_pos < MAX_CALLBACKS ) {
    callbacks[callbacks_pos++] = func;
    return 0;
  }
  //caso ja existam funcoes agendadas, retorna um erro
  return -1;

}

static void my_exit ( int status )
{
  void ( *func ) ( void );

  //executa todas as funcoes agendadas de tras para frente
  while ( callbacks_pos != -1 )
    if ( (func = callbacks[callbacks_pos--]) != NULL )
      func ();
  exit(status);
}

static void func0 (void) { fprintf ( stdout, "funcao 0... \n" ); }
static void func1 (void) { fprintf ( stdout, "funcao 1... \n" ); }
static void func2 (void) { fprintf ( stdout, "funcao 2... \n" ); }
static void func3 (void) { fprintf ( stdout, "funcao 3... \n" ); }
static void func4 (void) { fprintf ( stdout, "funcao 4... \n" ); }
static void func5 (void) { fprintf ( stdout, "funcao 5... \n" ); }
static void func6 (void) { fprintf ( stdout, "funcao 6... \n" ); }
static void func7 (void) { fprintf ( stdout, "funcao 7... \n" ); }
static void func8 (void) { fprintf ( stdout, "funcao 8... \n" ); }
static void func9 (void) { fprintf ( stdout, "funcao 9... \n" ); }

int main (void)
{
  my_atexit (func0);
  my_atexit (func1);
  my_atexit (func2);
  my_atexit (func3);
  my_atexit (func4);
  my_atexit (func5);
  my_atexit (func6);
  my_atexit (func7);
  my_atexit (func8);
  my_atexit (func9);

  my_exit (0);

  //nunca sera executado!
  return 0;
}

alguem pra me "helpar"? //deve ser sono ja =D

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>

//numero maximo de callbacks permitidos
#define MAX_CALLBACKS 10//0 a 9

//matriz de ponteiros com os callbacks
static void *callbacks[MAX_CALLBACKS];
static int callbacks_pos = 0;

//implementacao de my_atexit ()
static int my_atexit ( void (*func) (void))
{
  //caso haja posicao disponivel na matriz, guarda o ponteiro
  if ( callbacks_pos < MAX_CALLBACKS ) {
    //callbacks[callbacks_pos++] = func;   
    callbacks[callbacks_pos] = (void *)func;//<---- mudei
    callbacks_pos++;
    return 0;
  }
  //caso ja existam funcoes agendadas, retorna um erro
  return -1;

}

static void my_exit ( int status )
{
  void ( *func )(void);
  callbacks_pos--;//Coloca na posicao 9
  
  //executa todas as funcoes agendadas de tras para frente
  while ( callbacks_pos != -1 ){
    if ( (func = (void (*) (void))callbacks[callbacks_pos]) != NULL )//<---- mudei
      func ();
    callbacks_pos--;
  }
  exit(status);
}

static void func0 (void) { fprintf ( stdout, "funcao 0... \n" ); }
static void func1 (void) { fprintf ( stdout, "funcao 1... \n" ); }
static void func2 (void) { fprintf ( stdout, "funcao 2... \n" ); }
static void func3 (void) { fprintf ( stdout, "funcao 3... \n" ); }
static void func4 (void) { fprintf ( stdout, "funcao 4... \n" ); }
static void func5 (void) { fprintf ( stdout, "funcao 5... \n" ); }
static void func6 (void) { fprintf ( stdout, "funcao 6... \n" ); }
static void func7 (void) { fprintf ( stdout, "funcao 7... \n" ); }
static void func8 (void) { fprintf ( stdout, "funcao 8... \n" ); }
static void func9 (void) { fprintf ( stdout, "funcao 9... \n" ); }

int main (void)
{
  my_atexit (func0);
  my_atexit (func1);
  my_atexit (func2);
  my_atexit (func3);
  my_atexit (func4);
  my_atexit (func5);
  my_atexit (func6);
  my_atexit (func7);
  my_atexit (func8);
  my_atexit (func9);

  my_exit (0);

  //nunca sera executado!
  return 0;
}

Kkkk deve ser sono, ainda mais pra usar // huehuehue, enfim eu dei uma ajuda, espero que esteja de acordo com seu programa, boa sorte.

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
Entre para seguir isso  





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

×