espack 0 Denunciar post Postado Janeiro 30, 2013 Pessoal, Usando o Net Beans, estou tentando empilhar pela primeira vez em uma pilha, mas o meu programa em C++ está retornando a mensagem de "Segmentation Fault" quando se tenta carregar a variável 'prox' da lista auxiliar com o endereço de 'prim', sendo o topo da pilha. ou seja, void pilha_push(Pilha *p, int valor) Lista *t = (Lista)malloc(sizeof(Lista *)); t->v = valor; t->prox = p->prim; // o problema ocorre aqui } Já procurei de tudo, mas não sei como resolver e, acredite se quiser, nem meus professores. Se desse para colcoar evidência neste fórum seria mais fácil a visualização, peço desculpas e agradeço a ajuda de todos. Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Janeiro 30, 2013 espack, Onde vejo que você possa corrigir, é nesta linha: Lista *t = (Lista)malloc(sizeof(Lista *)); Mude por isto: Lista *t = (Lista*)malloc(sizeof(Lista)); Você faz casting para um objeto do tipo não estático, mas a função malloc retorna um ponteiro. Sizeof retorna o tamanho em bytes, passando como argumento um ponteiro, creio que vá retornar o tamanho de um ponteiro que é 1. O segmentation fault ocorre, quando tenta acessar um mebro de t, que não está alocado. Malloc: http://www.cplusplus.com/reference/cstdlib/malloc/?kw=malloc Sizeof: http://www.cplusplus.com/faq/sequences/arrays/sizeof-array/ Espero ter ajudado, FLW! Compartilhar este post Link para o post Compartilhar em outros sites
espack 0 Denunciar post Postado Janeiro 31, 2013 Becker, tudo bom? Na verdade, eu escrevi errado o código, e não pude colocar a evidência devido ao bloqueio do fórum para imagens. Segue abaixo meu código de Pilha que está dando problemas no pilha_push(), logo no t->prox=p->prim Estou testando no NetBeans. /*** * Estrutura da Lista Principal */ struct lista{ int posx, posy; /* posicao na matriz */ char valor; /* valor de posicao da matriz */ struct lista *prox; }; typedef struct lista Lista; /*** * Estrutura da Pilha Principal */ struct pilha{ Lista *prim; }; typedef struct pilha Pilha; Pilha *pilha_cria(){ Pilha *p = (Pilha*)malloc(sizeof(Pilha)); if(!p) { printf("Erro:Memória Insuficiente. Libere memória.\n"); exit(-1); } p->prim = NULL; return p; } /*** * Insere Um Item na Pilha */ void *pilha_push(Pilha *p,int px, int py, char v){ Lista *t = (Lista*)malloc(sizeof(Lista)); t->posx = px; t->posy = py; t->valor = v; t->prox = p->prim; p->prim = t; free(t); return p; } void *pilha_pop(Pilha *p, int px, int py, char v){ Lista *t; t=p->prim; px=t->posx; py=t->posy; v=t->valor; p->prim = t->prox; free(t); return p; } Muito obrigado pelo auxilio, pois ainda nem os professores conseguiram me ajudar.. rs.. Abraços e sucesso! Compartilhar este post Link para o post Compartilhar em outros sites
espack 0 Denunciar post Postado Fevereiro 1, 2013 Pessoal, A Pilha está funcionando agora, mas o problema estava mesmo no C, que perdeu a referência do endereço da Pilha *p durante o andamento do código, logo deopis de um WHILE() bastante grande. Bem, não entendi o que houve, mas agora a pilha está em funcionamento. Obrigado pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites