Ir ao conteúdo
  • Cadastre-se

Ponteiros


Luks_88

Posts recomendados

Preciso construir um TAD (Tipo Abstrato de Dados) com ponteiros e tudo, mas eu não estou conseguindo nem o basicão. Preciso criar uma lista, mas eu não estou conseguindo nem inicializar a lista vazia, nem adicionar células, nem nada, dá "segmentation fault"... Vejam se dá pra ajudar...Já procurei, mas não acho o que está errado...Muito obrigado


#include <stdio.h>
#include <stdlib.h>

struct cel {
int conteudo;
struct cel *prox;
};

typedef struct cel celula;

void inicializa (celula *ini)
{
ini = malloc (sizeof (celula));
ini->prox = NULL;
}

void *mallocX (unsigned int nbytes)
{
void *ptr;
ptr = malloc (nbytes);
if (ptr == NULL) {
printf ("Socorro! malloc devolveu NULL!\n");
exit (EXIT_FAILURE);
}
return ptr;
}

void insere (int x, celula *p)
{
celula *nova;
nova = malloc (sizeof (celula));
nova->conteudo = x;
nova->prox = p->prox;
p->prox = nova;
}

main()
{
celula *a;
int x;
scanf("%d",&x);
inicializa (a);
insere (x,a);
system("pause");
}

Link para o comentário
Compartilhar em outros sites

Ola Luks_88

Eu encontrei algumas coisas estranhas no código, quem sabe altera-las nao fazem o código funcionar...


struct cel {
int conteudo;
struct cel *prox;
};

typedef struct cel celula;

voce pode trocar o trecho acima por isso:

typedef struct cel{
int conteudo;
cel* prox;
}celula;
// Isso cria uma estrutura com o nome "celula", e o "prox" também como "celula"

void inicializa (celula *ini)
{
ini = malloc (sizeof (celula));
ini->prox = NULL;
}

Talvez fosse mais interessante criar uma estrutura do tipo lista, com uma celula para marcar a cabeça, ou inicio da lista... Dai você inicializa a cabeça ou inicio da lista...

void *mallocX (unsigned int nbytes) 
{
void *ptr;
ptr = malloc (nbytes);
if (ptr == NULL) {
printf ("Socorro! malloc devolveu NULL!\n");
exit (EXIT_FAILURE);
}
[B]return ptr;[/B]
}

Essa função é do tipo void, então nao pode retornar nada. Outra coisa, se fosse uma função de outro tipo, o valor a ser retornado sempre deve estar entre parenteses (E.g. return(ptr)).

void insere (int x, celula *p)
{
celula *nova;
[B]nova = malloc (sizeof (celula));[/B]
nova->conteudo = x;
nova->prox = p->prox;
p->prox = nova;
}

A parte em negrito deve ser alterada para "nova = (celula*)malloc(sizeof(celula));"

Bom, acho que é isso... altere estas coisas, e veja se o código compila... Se compilar, veja se faz o que deveria... :P

Abraços,

Thiago.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!