Boa tarde a todos, Gostaria de recolher informações para um programa que estou fazendo, na verdade um programa de uma livraria...está quase pronto. o programa lê os livros inserido, isere mais livros e remove os livros a partir de seu codigo inscrito...o problema que estou encontrando é na parte de remover os livros...não sei porque quando tento remover o compilador c++ builder trava do nada....se puderem dar sugestoes agradeço. Peço desculpas mas terei que colocar o código inteiro para ficar entendivel. Agradeço desde já qualquer sugestão. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> struct livro{ struct livro *prox; int codigo; char nome [50]; char autor [50]; char genero [50]; int ano; float preço; }; void insere_lista(struct livro **inicio); int menu(); void consulta(struct livro *lista); void remove_lista(struct livro **endlista,struct livro *lista); int main(){ struct livro *inicio=NULL; int opcao=0, pos; char elem; while (opcao!=4){ opcao=menu(); switch (opcao){ case 1: insere_lista(&inicio); break; case 2: consulta(inicio); system("pause>null"); break; case 3: remove_lista(&inicio, inicio); printf("\n Elemento Removido: %s\n",elem); system("pause>null"); break; case 4: exit(1); } } } int menu(){ int op; system("cls"); printf("========================================\n"); printf("= Sistema de Gerenciamento de Livraria =\n"); printf("========================================\n"); printf("\nOpcoes:\n"); printf("\n 1. Inserir novo livro"); printf("\n 2. Consultar livros"); printf("\n 3. Excluir livro"); printf("\n 4. Sair\n"); printf("\n Informe a opcao desejada: "); scanf("%d",&op); return op; } void insere_lista(struct livro **inicio){ struct livro *novo; novo = (struct livro*) malloc(sizeof(struct livro)); system("cls"); printf("==================================\n"); printf("= 1. Inserir novo livro =\n"); printf("==================================\n"); fflush(stdin); printf("\nInforme o codigo do livro: "); scanf("%d", &novo->codigo); fflush(stdin); printf("Informe o nome do livro: "); gets(novo->nome); fflush(stdin); printf("Informe o autor do livro: "); gets(novo->autor); fflush(stdin); printf("Informe o genero do livro: "); gets(novo->genero); printf("Informe o ano do livro: "); scanf("%i", &novo->ano); printf("Informe o preço do livro: "); scanf("%f", &novo->preço); if ( (*inicio) == NULL ){ (*inicio) = novo; (*inicio)->prox = NULL; } else { novo->prox = (*inicio); (*inicio) = novo; } } void consulta(struct livro *lista){ printf("\n Imprimindo a Lista Singularmente Encadeada \n"); int i = 1; while(lista != NULL) { printf("\n====================================="); printf("\nCodigo do Livro: %d", lista->codigo); printf("\nNome: %s", lista->nome); printf("\nAutor: %s", lista->autor); printf("\nGenero: %s", lista->genero); printf("\nAno: %i", lista->ano); printf("\nPreço: %f", lista->preço); printf("\n====================================="); lista=lista->prox; i++; } } void remove_lista(struct livro **endlista,struct livro *lista){ struct livro *aux = lista; int num; fflush(stdin); printf("\nInforme o codigo do livro a ser excluido: \n"); scanf("%d",&num); while (lista->prox!=NULL){ if (lista->codigo==num){ aux->prox=lista->prox; free(lista); }else{ aux=lista; lista=lista->prox; }}} // fecha else } // fecha while } // fecha remove A parte do remove aqui no final não funciona...não sei porque.