Desenvolvi um algoritmo utilizando alocação dinâmica de memória, que segue em sequência, para o seguinte exercício:
#include <stdio.h>
#include <stdlib.h>
int main(){
int numero, c = 0, *num_pares, *num_impares, c_par = 0, c_impar = 0;
num_pares = malloc(sizeof(int));
num_impares = malloc(sizeof(int));
do{
printf("Insira um número inteiro: ");
scanf("%d", &numero);
if(numero != -1){
if(numero >= 0 && numero <= 100){
if(numero % 2 == 0){
num_pares = realloc(num_pares, sizeof(int));
if(num_pares != NULL){
num_pares[c_par] = numero;
}else{
printf("Memória insuficiente!\n");
exit(1);
}
c_par++;
}else{
num_impares = realloc(num_impares, sizeof(int));
if(num_impares != NULL){
num_impares[c_impar] = numero;
}else{
printf("Memória insuficiente!\n");
exit(1);
}
c_impar++;
}
c++;
}else{
printf(" Número fora do intervalo permitido [0-100], tente novamente.\n");
}
}
}while(c < 10 && numero != -1);
printf("\nForam digitados %d números\n\n", c);
printf("Números pares: ");
if(c_par != 0){
for(int i = 0; i < c_par; i++){
printf("%d ", num_pares[i]);
}
}else{
printf("nenhum número par\n");
}
printf("\nNúmeros ímpares: ");
if(c_par != 0){
for(int i = 0; i < c_impar; i++){
printf("%d ", num_impares[i]);
}
}else{
printf("nenhum número ímpar\n");
}
free(num_pares);
free(num_impares);
return 0;
}
Mesclando a entrada com números pares e ímpares o algoritmo funciona perfeitamente, porém se a entrada for somente de números pares ou ímpares a execução é interrompida retornando o erro que segue na captura de tela. O que ocasiona esse erro e, consequentemente, como solucioná-lo?