Ir ao conteúdo
  • Cadastre-se

Segmentation fault (core dumped), funcao atexit


reuter_rjort

Posts recomendados

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!