I am a beginner in C and I am 2 days into this exercise, I was able to do it so that if you increase the vector with the realloc
function, it will increase everything right, but I need it to save the values you typed .
For example, I want a vector of 2 positions, and then I'm going to reallocate it with + 3 positions, it should not ask to insert all the values of the vector again, but to enable to insert values ONLY for these 3 new positions
How do I get it to save what was already stored in the vector first?
No I was able to leave stored the values that the user types the first time when the vector is allocated and then only fill by relocating the values of the NEW POSITIONS strong>, that is, letting the user fill in new values only in these new positions and MAINTAIN THE NUMBERS DIGITED ABOVE
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
int i,k,n;
printf ("\nDigite a quantidade de numeros que serao digitados: ");
fflush(stdin);
scanf ("%d",&i); // a variavel i vai receber a quantidade de numeros que sera necessario para o vetor
/* a função malloc reserva espaço suficiente para um vetor de inteiros.
caso sejam digitados 5 elementos serão reservados 20 bytes, pois cada
inteiro ocupa 4 bytes na memória */
p=(int*)malloc(i*sizeof(int)); // Aloca um espaço de memoria para um vetor de inteiros
if (p==NULL) // verifica se ha memoria disponivel ANTES de habilitar para preencher vetor
{
printf ("\nERRO.MEMORIA INSUFICIENTE");
exit(1);
}
for (k=0;k<i;k++) // preenche o vetor
{
printf ("\nDigite o %d numero do vetor: ",k+1);
fflush(stdin); //limpar buffer do teclado
scanf ("%d",&p[k]);
}
printf ("\n\n\t\t========== VETOR PREENCHIDO ==========\n");
for (k=0;k<i;k++) // Mostra vetor preenchido
{
printf ("\t\t%d",p[k]);
}
printf ("\n\nSeu vetor possui %d elementos.",i);
printf ("\nDigite um valor positivo para aumentar ao vetor.");
printf ("\n\n");
fflush(stdin);
scanf ("%d",&n); // n vai receber a quantidade de posicoes que tera de ser realocado o vetor para inserção de novos numeros
if ((i+n)<0) // Testa para ver se o usuario vai digitar um valor positivo para aumentar o vetor dinamicamente
{
printf ("\nSeu vetor possui quantidade negativa de elemento.\n\nIMPOSSIVEL ALOCAR MEMORIA.\n\n");
free(p);
return 0;
system("pause");
}
/* a função realloc aumenta (numero positivo) ou diminui (numero negativo), o tamanho do
vetor dinamicamente. ela recebe o ponteiro para o vetor anterior e retorna o novo espaço alocado */
p=(int*)(realloc(p,(i+n)*sizeof(int))); // REaloca um espaço de memoria para a quantidade informada
if (p==NULL) //Testa novamente mas agora para saber se ha espaço disponivel para a REalocacao
{
printf ("\nERRO DE REALOCACAO.MEMORIA INSUFICIENTE");
exit(1);
}
for (k=0;k<(n+i);k++) // Aceita preencher com os novos valores do vetor aumentado dinamicamente
{
printf ("\nDigite o %d numero do vetor: ",k+1);
fflush(stdin);
scanf ("%d",&p[k]);
}
printf ("\n\n\t\t========== VETOR PREENCHIDO REALOCADO ==========\n");
for (k=0;k<(n+i);k++) // Mostra vetor REalocado
{
printf ("\t\t%d",p[k]);
}
free(p); // Libera o espaço de memoria que utilizamos
return 0;
system("pause");
}