Ir ao conteúdo
  • Cadastre-se
kowtow

Como fazer uma função para Vetores Dinâmicos ?

Recommended Posts

Olá pessoal, tenho uma dúvida, tenho na main() um vetor inteiro chamado lista, e uma função que aumentará o tamanho dela +1.

Função:

int aumentarlista(int *lista, int n){

n=n+1;

lista = (int *) malloc (n * sizeof(int));

}

Principal:

main(){

int *lista, n = 1;

lista = (int *) malloc (n * sizeof(int));

aumentarlista(lista,n);

}

Esse código não está funcionando, quando sai da função não retorna valores...

O que pode estar ocorrendo ?

Abraço pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

main(){
int *lista, n = 1;
lista = (int *) malloc (n * sizeof(int));
aumentarlista(&lista,n);
}

int aumentarlista(int **lista, int n){
n=n+1;
*lista = (int *) realloc (*lista, n * sizeof(int));
}

realloc, nunca usei ela mas acredito q seja assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu Plateu e SuperNov4 :D

deixei assim:

int adicionarlista(int **lista, int n) {

int leia;

printf(" Valor: ");

scanf("%d",&leia);

n=n+1;

*lista = (int *) realloc (*lista, n * sizeof(int));

lista[n]=leia;

}

main(){

int *lista, n = 1;

lista = (int *) malloc (n * sizeof(int));

aumentarlista(&lista,n);

}

Mas agora da o seguinte erro:

In function 'int adicionarlista(int**,int):

invalid conversion from 'int' to 'int*'

:(

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta colocar assim:

lista = (int*) realloc (lista, n*sizeof(int*));

ou

lista = (int*) realloc ((*lista), n*sizeof(int*));

vou dar uma zoiada na sintaxe do realloc e te falo. Se nada der certo,a gente rebenta esse trem ai usando free, q tb faz parte do contexto de C...s e nao apelamos pro new e delete mesmo :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
o realloc acho q ta certo

acho q o erro é aqui:

lista[n]=leia;

tenta assim:

(*lista)[n]=leia;

funcionou :lol: valeu Plateu e SuperNov4

agora adicionei outra função para imprimir essa lista...

int desenhar(int *lista, int n){

int i;

printf("\n ");

for(i=0;i<n;i++){

printf("%d ",lista);

}

}

mas agora não está entrando no "for". deve ser o valor de "n"...

#include <stdio.h>

#include <stdlib.h>

int add(int **lista, int n) {

int leaf;

printf(" Value: ");

scanf("%d",&leaf);

n=n+1;

*lista = (int *) realloc (*lista, n * sizeof(int));

(*lista)[n]=leaf;

}

int desenhar(int *lista, int n){

int i;

printf("\n ");

for(i=0;i<n;i++){

printf("%d ",lista);

}

}

main(){

int op = 0, n = 0, *lista;

FILE *txt;

lista = (int *) malloc (n * sizeof(int));

if((txt = fopen("database.txt", "a+")) == NULL){

perror("\n Error Opening the File: database.txt!\n ");

exit(1);

}

do{

head();

printf(" Choose: \n 1. Insert\n 4. Print\n 0. Close\n\n >");

scanf("%d",&op);

switch(op){

case 1 : {

head();

printf(" INSERT\n\n");

add(&lista,n);

printf("\n ");

system("pause");

}

break;

case 4 : {

head();

printf(" PRINT\n\n");

desenhar(lista,n);

printf(" ");

system("pause");

}

break;

}

system("cls");

}while(op!=0);

fclose(txt);

return(0);

}

Editado por kowtow

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... modifiquei, agora imprime só que quando n = 2 da um bug ! imprime um número esdruxulo kkkk

#include <stdio.h>

#include <stdlib.h>

int add(int **lista, int n) {

int leaf;

printf(" Value: ");

scanf("%d",&leaf);

*lista = (int *) realloc (*lista, n * sizeof(int));

(*lista)[n]=leaf;

}

int desenhar(int *lista, int n){

int i;

printf("\n ");

for(i=1;i<n+1;i++){

printf("%d ",lista);

}

}

main(){

int op = 0, n = 0, *lista;

FILE *txt;

tree = (int *) malloc (n * sizeof(int));

if((txt = fopen("database.txt", "a+")) == NULL){

perror("\n Error Opening the File: database.txt!\n ");

exit(1);

}

do{

printf(" Choose: \n 1. Insert\n 4. Print\n 0. Close\n\n >");

scanf("%d",&op);

switch(op){

case 1 : {

printf(" INSERT\n\n");

n=n+1;

add_leaf(&lista,n);

ordenar();

printf("Valor de n: %d",n);

printf("\n ");

system("pause");

}

break;

case 4 : {

printf(" PRINT\n\n");

desenhar(lista,n);

printf(" ");

system("pause");

}

break;

}

system("cls");

}while(op!=0);

fclose(txt);

return(0);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×