iagoac / mc202

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

Dúvida para utilização da função Realloc [Lab 2] #35

Closed ErikGoto closed 3 years ago

ErikGoto commented 4 years ago

Boa noite,

Estou com dificuldades em utilizar de forma correta a função realloc() para aumentar o tamanho do vetor que contêm as informações de idade e contágio.

Minha ideia para resolver o lab é usar um vetor casos[]; cada posição se refere a idade, e os valores ao contágio, ou seja, casos[15] = 20 são 20 casos em indivíduos com 15 anos. Estou usando o realloc sempre que a idade excede uma idade pré definida. E sempre que eu uso essa função defino o valor "0" como sendo o conteúdo dos novos endereços.

int ult_num = 5;
if (ult_num < y) {
            casos = realloc(casos, (y * sizeof(int)) + 1);

            //Limpa as novas posições
            for (int i = ult_num + 1; i < y; i++){
                casos[i] = 0;
            }
            //Guarda um novo valor da maior idade
            ult_num = y;

        }

O problema que eu to enfrentando é que tem vezes que o conteúdo do endereço não é "limpo", e é imprimido coisas como: casos[85] = 18885022

Há outra maneira de realocar memória e ao mesmo tempo limpá-la?

Tomikins commented 4 years ago

Acho que entendi seu problema:

Quando você aloca o espaço pra 10 int num vetor, ele vai de v[0], até v[9], e sua variável ult_num não guarda a ultima posição do vetor, ela guarda um posição depois da última. Então quando você realoca ele com espaço para 11 int, você teria que começar limpando a v[10], entende? Então ali no seu código, você teria que começar zerando v[i-1].

E ali no realloc, o correto seria "realloc(casos, (y+1)*sezeof(int))" se você quer alocar pra caber y+1 inteiros.

ErikGoto commented 4 years ago

Tentei mudar o início para "casos[i-1]", mas ainda não deu certo. Vou pensar mais um pouco, agora que tenho um direcionamento de onde tá o erro acho que vai ser mais fácil. Obrigado!