iagoac / mc202

Disciplina MC202 - Estruturas de Dados
GNU General Public License v3.0
17 stars 13 forks source link

Dúvida com função Realloc. #43

Closed GuilhermePascon closed 3 years ago

GuilhermePascon commented 4 years ago

Olá, estou inicializando meu vetor que guardará as informações como:

int *lista = NULL

depois alocando a memoria inicial de tamanho 5 assim (current_size é igual a 5):

lista = calloc(current_size, sizeof(int));

e logo na segunda linha do primeiro teste ("0 194 9") onde eu preciso dobrar o tamanho do array, eu faço da seguinte forma:

while (Y > current_size) { current_size = 2 * current_size; lista = realloc(lista, (current_size * sizeof(int))); }

no entanto olhando no gdb, ao executar a linha

lista = realloc(lista, (current_size * sizeof(int)));

eu recebo o seguinte erro:

image

não sei dizer em que parte do código eu errei, alguém pode me ajudar?

iagoac commented 4 years ago

Tente substituir lista = realloc(lista, (current_size * sizeof(int))); por lista = (int*) realloc(lista, current_size * sizeof(int));

GuilhermePascon commented 4 years ago

Nao deu certo, professor, obtive o mesmo resultado, tentei colocar o (int *) em calloc tambem e do mesmo jeito nao funcionou.

iagoac commented 4 years ago

Isto realmente era para funcionar. Veja o seguinte código abaixo (e o output gerado). O único problema do realloc é que não inicializa o vetor com zeros e, portanto, lixo de memória foi impresso.

image

Sem o GDB, qual erro o compilador está gerando?

GuilhermePascon commented 4 years ago

Não lembro exatamente o erro mas era algo com código de erro de malloc, mas realmente, verifiquei o código de novo e funcionou, acho que o problema deve ser com o GDB, curioso. Muitíssimo obrigado professor e desculpe o incômodo ao Domingo.

iagoac commented 4 years ago

Bem curioso mesmo o GDB informar um erro, sendo que a execução normal do programa funciona perfeitamente. Pode ser conflito entre as versões do GDB, do compilador e do C instalado no computador. Mas, vai saber realmente o que acontece...

GuilhermePascon commented 4 years ago

Update sobre o que pode ter acontecido. Eu estava usando comando "s" do gdb para quando chegar em uma linha de codigo que chama uma funcao, eu entrar nessa funcao para poder ver o que esta acontecendo. No entanto quando cheguei na linha que chamava "realloc" eu continuei usando o comando "s" em vez de mudar para o "n" (que nao entra na funcao, apenas a executa) e isso deve ter causado algum problema ou deve ter dado alguma informacao que eu nao soube interpretar.