Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Furlan_198657

Problema em imprimir conteúdo de um vetor alocado

Recommended Posts

Olá pessoal, alguem pode me ajudar com esse erro?


É o seguinte, no segundo for, preciso imprimir o conteúdo de ptr, mas do jeito que está o código, retorna o endereço. Como faço para imprimir os valores informados pelo usuario ao invés dos endereços? Obrigado


#include <stdio.h>

#include <stdlib.h>


main(){

int n,i,num, verifica=0, *ptr;

printf("total de numeros: ");

scanf("%d",&n);

ptr = (int*)malloc(n);//aloca memoria para n numeros inteiros

int vet[n];


for(i=0;i<n;i++){//verifica e preenche com numeros impares

printf("digite um numero impar: ");

scanf("%d",&num);

verifica = num%2;

if( verifica == 0 || num < 0 ){

printf("Somente numeros impares e maior que zero!\n");

i--;

}

if(verifica != 0){

ptr[n]=num;

num=0;

//printf("\nptr = %d ",ptr[n]);

vet[n] = ptr[n];

}


}

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

printf(" %d ", ptr);

}

free(ptr);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vitor, acho que você quis dizer:

 

ptr[i]
Thiago, existem dois problemas principais no seu programa:

 

1. A quantidade de memória alocada é incorreta. Você deve especificar o tamanho em bytes. E para armazenar n elementos, cada um com B bytes, você precisa de n * B bytes:

 

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

if (!ptr)
{
    // tratar erro de alocação
}

// continuar
2. Você quer imprimir o elemento da posição (ptr + i), e não (ptr + n). Na verdade, *(ptr + n) gera comportamento indefinido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá guidjos, com as seguintes alterações:

 

 

#include <stdio.h>

#include <stdlib.h>
int main(){
int n,i,num, verifica=0;
printf("total de numeros: ");
scanf("%d",&n);
//ptr = (int*)malloc(n);//aloca memoria para n numeros inteiros
int *ptr = malloc(n * sizeof *ptr);
for(i=0;i<n;i++){//verifica e preenche com numeros impares
printf("digite um numero impar: ");
scanf("%d",&num);
verifica = num%2;
if( verifica == 0 || num < 0 ){
printf("Somente numeros impares e maior que zero!\n");
i--;
}
if(verifica != 0){
ptr[n]=num;
num=0;
}
}
int x = n;
for(i=0;i<n;i++){
printf(" %d ", *(ptr+x));
x--;
}
free(ptr);
}
Gerou essa saída:

 

saida.png

 

O primeiro valor "5" tá correto, mas os outros acho que é o endereço..

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.