Olá pessoal, estou estudando alocamento dinâmico e não consigo achar o erro nesse cód.
Ele é um cadastro de carros com modelo, ano e valor. O que eu acho que está acontecendo é que ao realocar dentro do laço while pela segunda vez, ele compromete parte do bloco do cadastro do primeiro carro, ao realocar pela terceira, compromete a do segundo carro, e assim por diante. Se alguém puder me dar uma luz, agradeço. (Recomendo não usarem o dev, haha).
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char modelo[30];
int ano;
float valor;
}t_carro;
int main(int argc, char *argv[]) {
int i, qte = 0;
char opcao;
t_carro *pc; //cria ponteiro para tipo t_carro
system("color 70"); //cor da tela
pc = malloc(sizeof(t_carro)); //aloca espaco de tamanho correspondente ao da struct, para o qual pc aponta
puts("informe modelo, ano e valor");
fflush(stdin); gets(pc->modelo); //Pega o valor correspondente ao modelo da struct que pc aponta
fflush(stdin); scanf("%d",&pc->ano); //Pega o valor correspondente ao ano da struct que pc aponta
fflush(stdin); scanf("%f",&pc->valor); //Pega o valor correspondente ao valor da struct que pc aponta
qte++; //após cadastrar - contabiliza um carro cadastrado (qte = quantidade)
printf("\nModelo: %s\nAno:%d\nValor: %f\n",pc->modelo,pc->ano,pc->valor);
puts("\nDeseja cadastrar outro? s/n");
fflush(stdin); scanf("%c", &opcao);
while(opcao == 's'){
qte++; //A quantidade aumenta
realloc(pc, qte*sizeof(t_carro)); //Precisará de mais espaço -> realocará para que: espaço = quantidade de carros atual * tamanho da struct
//printf("modelo: %s\n ano:%d\n valor: %f\n",pc->modelo,pc->ano,pc->valor);
pc++; //move o ponteiro uma casa a frente, para salvar o carro (equivalente a um i++ se fosse pc[i])
puts("\nInforme modelo, ano e valor");
fflush(stdin); gets(pc->modelo);
fflush(stdin); scanf("%d", &pc->ano);
fflush(stdin); scanf("%f", &pc->valor);
printf("\nModelo: %s\nAno:%d\nValor: %f\n", pc->modelo, pc->ano, pc->valor);
//printf("\nALOHA: %d\n", ((pc-2)->ano)); // teste
puts("\nDeseja cadastrar outro? s/n");
fflush(stdin); scanf("%c", &opcao);
}
pc -= qte-1; //Para imprimir as informaçoes desde o inicio, subtrai a quantidade cadastrada, mas soma 1 para chegar ao primeiro.
for(i = 0; i < qte; i++){
printf("\n--- Carro numero %d ---", i+1);
printf("\nModelo: %s\nAno:%d\nValor: %f\n", pc->modelo, pc->ano, pc->valor);
pc++;
}
return 0;
}
carros.txt