Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

espack

Pilha com Lista Encadeada - Segmentation Fault

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.