Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoa beleza? To com esse exercício aqui pra resolver
1) Faça um laço de entrada de dados, onde o usuário deve digitar uma sequência de números, sem limite de quantidade de dados a ser fornecida. O usuário irá digitar os números um a um, sendo que caso ele deseje encerrar a entrada de dados, ele irá digitar o número Zero.
Atenção:
Os dados devem ser armazenados na memória deste modo: faça com que o programa inicie criando um ponteiro para um bloco (vetor) de 10 valores inteiros, e alocando dinamicamente espaço em memória para este bloco; logo após, caso o vetor alocado esteja cheio; aloque um novo vetor do tamanho do vetor anterior adicionado com espaço para mais 10 valores (tamanho N+10, onde N inicia com 10), copie os valores já digitados da área inicial para esta área maior e libere a memória da área inicial; repita este procedimento de expandir dinamicamente com mais 10 valores o vetor alocado cada vez que o mesmo estiver cheio. Assim o vetor irá ser “expandido” de 10 em 10 valores.
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int *p;
int num;
for(i=0;num!=0;i++) {
p= (int*) realloc(p,i*sizeof(int));
printf("Digite os numeros:\n");
scanf("%d",&num);
}
printf("Concluido");
}
O exercício esta resolvido,mas n te acordo com o o professor pediu. Por isso to pedindo esse help aqui. Vlww
Poxa cara vlw msm, vc explicou bem vários conceitos q eu só sabia por auto. Vou usar o seu código como base pra muitas coisas no meu curso kkk. Estrutura de dados é tenso.
Muito obrigado!!
[PROBLEMA RESOLVIDO]
GBecker, parabéns por não cair na armadilha de vazamento de memória com realloc. Muita gente perde o valor do ponteiro original, associando o retorno de realloc ao objeto que continha o valor antigo antes de verificar se a função retornou !0.
Li seu código rapidamente, e uma sugestão que tenho é usar **sizeof nome ao invés de sizeof (t )**.
Abs
Obrigado Guidjos.
Prestei bastante atenção nos errors e warnings retornados pelo compilador, só considerei o exemplo terminado quando o compilador não retornou mais nada.
Esse é problema é melhor explicado demostrando um código.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// Tamanho inicial do vetor
Esse código dobra o tamanho do vetor a cada vez que fica cheio. Estude-o e altere de acordo com a necessidade.
Links:
http://www.cplusplus.com/reference/cstdlib/malloc/
http://www.cplusplus.com/reference/cstdlib/realloc/?kw=realloc
Espero ter ajudado, FLW!