Ir ao conteúdo

C Erro ao usar realocar memória para vetor


Ir à solução Resolvido por allanxd,

Posts recomendados

Postado

Desenvolvi um algoritmo utilizando alocação dinâmica de memória, que segue em sequência, para o seguinte exercício:

 

Citação

Escreva um programa que solicite a digitação de no máximo 10 números, representando valores de 0 a 100. Valores fora desta faixa não são aceitos e o valor -1 encerra digitação, caso o usuário pretenda digitar menos que 10 números. Contudo, se ele digitar 10 números o programa deixa de solicitar novos números. Digitando 10 números ou não, o programa deve mostrar quantos números foram informados, quais são o pares e quais são os ímpares.

 

#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? 

Erro.png

  • Solução
Postado
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
    int numero, c = 0, *num_pares = NULL, *num_impares = NULL, c_par = 0, c_impar = 0;

	num_pares = (int*)malloc(sizeof(int));
	num_impares = (int*)malloc(sizeof(int));

	do{
		printf("Insira um numero inteiro: ");
		scanf("%d", &numero);
		c++;

		if(numero != -1){
			if(numero >= 0 && numero <= 100){
				if(numero % 2 == 0){
					num_pares = (int*)realloc(num_pares, c * sizeof(int));

					if(num_pares != NULL){
						num_pares[c_par] = numero;
					}else{
						printf("Memoria insuficiente!\n");
						exit(1);
					}

					c_par++;
				}else{
					num_impares = (int*)realloc(num_impares, c * sizeof(int));

					if(num_impares != NULL){
						num_impares[c_impar] = numero;
					}else{
						printf("Memoria insuficiente!\n");
						exit(1);
					}

					c_impar++;
				}


			}else{
				printf("Numero fora do intervalo permitido [0-100], tente novamente.\n");
			}
		}
	}while(c < 10 && numero != -1);

	printf("\nForam digitados %d numeros\n\n", c);

	printf("Numeros pares: ");
	if(c_par != 0){
		for(int i = 0; i < c_par; i++){
			printf("%d ", num_pares[i]);
		}
	}else{
		printf("nenhum numero par\n");
	}

	printf("\nNumeros impares: ");
	if(c_impar != 0){
		for(int i = 0; i < c_impar; i++){
			printf("%d ", num_impares[i]);
		}
	}else{
		printf("nenhum numero impar\n");
	}

	free(num_pares);
	free(num_impares);
    return 0;
}

Funcionou?

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...