Não sei nem explica direito este erro, mas é o seguinte:
Estou fazendo um trabalho onde monto uma pokedex. Aloco dinamicamente um vetor de tPokemon (minha struct pokemon), para armazenar os dados de varios pokemon. Porém, ao imprimi-la, os Pokemon 5 e 6 não aparecem com numero 5 e 6, eles aparecem como lixo.
Impressão da Pokedex:
Pokemon 1 nao consta na Pokedex
Pokemon 2 nao consta na Pokedex
Pokemon 3 consta na Pokedex
Pokemon 4 nao consta na Pokedex
Pokemon 1701539664 consta na Pokedex
Pokemon 757935405 consta na Pokedex
Pokemon 7 nao consta na Pokedex
Pokemon 8 nao consta na Pokedex
Pokemon 9 nao consta na Pokedex
Pokemon 10 nao consta na Pokedex
não sei o que é, será algum problema de memória?
Agora, mudei o nome da variavel de "id" para "valor" e apenas o numero 5 ficou com problema:
Impressão da Pokedex:
Pokemon 1 nao consta na Pokedex
Pokemon 2 nao consta na Pokedex
Pokemon 3 nao consta na Pokedex
Pokemon 4 nao consta na Pokedex
Pokemon 1701539664 consta na Pokedex
Pokemon 6 nao consta na Pokedex
Pokemon 7 nao consta na Pokedex
Pokemon 8 nao consta na Pokedex
Pokemon 9 nao consta na Pokedex
Pokemon 10 nao consta na Pokedex
Mas logo depois fui continuar a testar e o numero 6 voltou a ficar com problema. São sempre estes 2 numeros.
Segue o codigo da função:
/*Função que insere na pokedex. Um vetor alocado dinamicamente, onde se o pokemon ja estiver registrado, terá o valor true*/
bool inserirPokemon(tPokedex* p, int valor) {
if (p->v[valor-1].reg == false) {
p->numElems++;
p->v[valor-1].reg = true;
p->v[valor-1].ID = valor;
p->v[valor-1].candy = p->v[valor-1].candy + 3;
p->v[valor-1].evolve = CandyEvolucao();
printf("Pokemon %d registrado com sucesso na Pokedex\n", valor);
return true;
}
p->v[valor-1].candy = p->v[valor-1].candy + 3;
return false;
}
há um warning que também não sei porque acontece e ele não aparece 100% das vezes:
Pokedex.c: In function ‘initPokedex’:
Pokedex.c:12:7: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
p->v = (tPokedex*) malloc (MAX*sizeof(tPokedex));