Ir ao conteúdo
  • Cadastre-se
Amanda Kellen

C (alocação dinâmica)O que tem de errado com esse código?

Recommended Posts

Fiz esse código com alocação dinâmica e ele compila,porém o primeiro elemento do vetor imprime de maneira errada pois imprime o endereço de memória,o que tenho q mudar?

Segue abaixo a foto do erro e o código

cats.jpg.318fb13c52c695823a6df40b3d7a1201.jpg

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *vetor,i;
	*vetor=(int*)malloc(5);
	if(vetor == NULL)
   {
   printf("Alocacao fracassada!");
   return vetor;
   }
   else{
      for(i=0;i<5;i++)
	  {
		printf("\nDigite o %d valor: ",i+1);
		scanf("%d",&vetor[i]);
		system("clear||cls");
	  }
	  printf(" %d",vetor[0]);
	    printf("\nO vetor digitado foi:\n[");
	     for(i=0;i<5;i++)
	      {
            printf(" %d,",vetor[i]);

	      }
        printf(" ]\n");
   }
    free(vetor);
	system("pause");
	return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @Amanda Kellen

 

Eu fiz algumas correções tentando compilar o código no Dev C++ e lá ele retorno certinho, código segue abaixo.

 

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *vetor,i;
	vetor=(int*)malloc(5);
	if(vetor == NULL)
   {
   printf("Alocacao fracassada!");
   return *vetor;
   }
   else{
      for(i=0;i<5;i++)
	  {
		printf("\nDigite o %d valor: ",i+1);
		scanf("%d",&vetor[i]);
		system("clear||cls");
	  }
	  printf(" %d",vetor[0]);
	    printf("\nO vetor digitado foi:\n[");
	     for(i=0;i<5;i++)
	      {
            printf(" %d,",vetor[i]);

	      }
        printf(" ]\n");
   }
    free(vetor);
	system("pause");
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1#

Indentação!

 

Sempre mantenha  o código indentado, ex.:

#include<stdio.h>
#include<stdlib.h>
int main() {
    int *vetor,i;
    *vetor=(int*)malloc(5);
    if (vetor == NULL) {
        printf("Alocacao fracassada!");
        return vetor;
    } else {
        for (i=0;i<5;i++) {
            printf("\nDigite o %d valor: ",i+1);
            scanf("%d",&vetor[i]);
            system("clear||cls");
        }
        printf(" %d",vetor[0]);
        printf("\nO vetor digitado foi:\n[");
        for(i=0;i<5;i++) {
            printf(" %d,",vetor[i]);   
        }
        printf(" ]\n");
    }
    free(vetor);
    system("pause");
    return 0;
}

 

 

 

2#

@Amanda Kellen, sobre:

21 minutos atrás, Amanda Kellen disse:

Fiz esse código com alocação dinâmica e ele compila,porém o primeiro elemento do vetor imprime de maneira errada pois imprime o endereço de memória,o que tenho q mudar?

Segue abaixo a foto do erro e o código

 

Acho que  o  problema central está na alocação de memória. Pelo que pesquisei (rapidamente)  sobre alocação para vetores, teria 2 pontos:

- Não tem aquele * antes do vetor.

- O parâmetro do malloc() seria diferente.

#include<stdio.h>
#include<stdlib.h>
int main() {
    int *vetor,i;
    /* *vetor=(int*)malloc(5); */
    vetor=(int*)malloc(5*sizeof(int));
    if (vetor == NULL) {
        printf("Alocacao fracassada!");
        /* return vetor;  */ //vai retornar justamente aquilo que "deu erro"?
        return 0; //retona 0 (na verdade não importa o valor, já que não está sendo utilizado. Serve apenas para "finalizar a  função")
    } else {
        for (i=0;i<5;i++) {
            printf("\nDigite o %d valor: ",i+1);
            scanf("%d",&vetor[i]);
            system("clear||cls");
        }
        printf("\nO vetor digitado foi:\n[");
        printf("%d",vetor[0]);
        //printf("\nO vetor digitado foi:\n[");
        for(i=1;i<5;i++) {
            //printf(" %d,",vetor[i]);
            printf(",%d",vetor[i]);   
          
        }
        //printf(" ]\n");
        printf("]\n");
    }
    free(vetor);
    system("pause");
    return 0;
}

obs.: não  sei se essa alocação é a correta...  vi exemplos na internet... e os  testes funcionaram também.

 

 

***

 

PS:  inserir outras pequenos ajustes...  basta comparar com o código original.

 

No aguardo.

  • Curtir 1

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

×