Error relocating struct vector to add more positions
I am doing a college job where it is necessary to develop a program for shoe stock management.
When inserting the eleventh shoe the error free(): double free detected in tcache 2
occurs when executing the method realloc
.
(tested on Arch Linux)
#include <stdio.h>
#include <stdlib.h>
#define TAM_MAX_MARCA 100
#define TAM_INICIAL_LISTA 5
typedef struct ParCalcado {
int codigo;
char marca[TAM_MAX_MARCA];
int numero;
int quantidade;
float valor;
} ParCalcado;
void imprimeMenu();
void opcaoInclusao(ParCalcado *lista);
ParCalcado leCalcado(int codigo);
int codigoAtual = 0;
int tamanhoLista = TAM_INICIAL_LISTA;
int elementosLista = 0;
int main() {
printf("Sistema de gestão de estoque de calçados\n\n");
ParCalcado *lista = (ParCalcado *) malloc(tamanhoLista * sizeof(ParCalcado));
int opcao;
do {
imprimeMenu();
printf("Informe a opção desejada: ");
scanf("%d", &opcao);
if (opcao == 1) {
opcaoInclusao(lista);
}
} while (opcao != 5);
free(lista);
return 0;
}
void imprimeMenu() {
printf(" 1 - Inclusão de novo calçado\n");
}
void opcaoInclusao(ParCalcado *lista) {
if (elementosLista == tamanhoLista) {
ParCalcado *listaNova = (ParCalcado *) realloc(lista, (tamanhoLista + 5) * sizeof(ParCalcado));
if (listaNova == NULL) {
printf("Erro ao alocar mais espaço para a lista\n");
return;
}
tamanhoLista += 5;
lista = listaNova;
listaNova = NULL;
printf("Tamanho da lista aumentado para %d\n", tamanhoLista);
}
lista[elementosLista++] = leCalcado(++codigoAtual);
}
ParCalcado leCalcado(int codigo) {
ParCalcado parCalcado;
parCalcado.codigo = codigo;
printf("\nCódigo: %d\n", codigo);
printf("Marca: ");
scanf("%s", parCalcado.marca);
printf("Número: ");
scanf("%d", &parCalcado.numero);
printf("Quantidade: ");
scanf("%d", &parCalcado.quantidade);
printf("Valor: ");
scanf("%f", &parCalcado.valor);
printf("\n");
return parCalcado;
}
0
Author: Bruno Henrique Paiva, 2020-04-07