1
I’m playing a little C here and I found that in the second insertion I do through the console that the lista
loses the first pointer(pointer) created in the first insertion creating a
Segmentation fault; dumped core;
Does anyone know why?
I have a structure like this:
typedef struct livro
{
char *nome;
int numLivros;
struct livro *next;
} Livro;
Function of allocating a book:
Livro* alocaLivro( char *nome, int num)
{
Livro *novo = (Livro *) malloc(sizeof(Livro));
char *novo_nome = (char *) malloc(sizeof(char) * MAX_NOME_LIVRO);
strcpy(novo_nome, nome);
novo->nome = novo_nome;
novo->numLivros = num;
novo->next = NULL;
return novo;
}
Insert book in list function:
int insertLivroCauda(Livro **lista, char *nome , int num)
{
Livro *novo = alocaLivro(nome, num);
if (!novo)
return 0;
if(*lista == NULL)
{
(*lista) = novo;
}
else
{
Livro *aux = (*lista);
while (aux->next != NULL)
{
aux = aux->next;
}
aux->next = novo;
}
return 1;
}
Main:
int main(int argc, char** argv)
{
Livro *lista = NULL;
char opt;
char *my_string;
printf("1 - Insirir novo livro\n");
printf("2 - Remover último livro\n");
while (scanf("%s",&opt))
{
switch(opt)
{
case '1':
printf("Insirir nome livro:\n");
my_string = (char*) malloc (sizeof(char) * MAX_NOME_LIVRO );
scanf("%s",my_string);
insertLivroCauda(&lista, my_string, sizeof(my_string));
break;
default:
return (EXIT_SUCCESS);
}
printf("1 - Insirir novo livro\n");
printf("2 - Remover último livro\n");
}
return (EXIT_SUCCESS);
}
Actually the problem was in reading and not pointing us. I created a function for reading that solved the problem.
– Jorge B.