×
Ir ao conteúdo
  • Cadastre-se

C erro na alocação em c


Ir à solução Resolvido por mauro_b,

Posts recomendados

estou criando uma calculadora para o método de lagrange, porém meu código em c está dando erro depois de alocar espaço para dois ponteiros.

 

segue o código:

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//LUCAS MURILO SILVA SOUSA RA:200866

void aloca(float **p,int tam);

main()
{
	float *x=NULL,px,*f=NULL,fx;
	int n,i;
	
	x=&px;
	f=&fx;
	
	printf("Digite o numero de pontos da tabela x e f(x):");
	scanf("%i",&n);
	
	aloca(&x,n);
	aloca(&f,n);


	
		for(i=0;i<n;i++)
		{
			if(i==0)
			printf("Digite o valor de cada ponto de x\n");
			
			
			printf("\nx[%i]\n",i);
			scanf("%f",(x+i));
			
		}
		for(i=0;i<n;i++)
		{
			if(i==0)
			printf("Digite o valor de cada ponto de f(x)\n");
			
			
			printf("\nf(x)[%i]\n",i);
			scanf("%f",(f+i));
			
		}
		
		
	

	return 0;
}

void aloca(float **p,int tam)
{
	if((*p=(float*)realloc(*p,tam*sizeof(float)))==NULL )
	
	exit(1);
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

A função realloc obriga realoque de memória anteriormente alocada, e sabemos que os endereços em x e f são da função [ou seja, declarados] esses locais não devem ser realocados. Com isso, especulo que rotinas internas interrompem (bruscamente) o programa por motivo de falha no uso da função.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

É como o @mauro_b explicou, a maneira digamos assim "correta" seria assim.

#include <stdio.h>
#include <stdlib.h>



void
aloca(float **p, int tam);

void
apaga(float **p);


int main(void)
{
        int cont;
        float *numeros;
        aloca(&numeros, 10);

        if (numeros == NULL) {
                return(1);              /* Erro! */
        }

        for (cont = 0; cont < 10; cont++) {
                numeros[cont] = cont+1;
        }

        for (cont = 0; cont < 10; cont++) {
                printf("\n%.2f", numeros[cont]);
        }
        getchar();

        apaga(&numeros);
        return(0);
}


void
aloca(float **p, int tam)
{
        *p = malloc(sizeof(*p)*tam);
}

void
apaga(float **p)
{
        if (*p != NULL) {
                free(*p);
        }

        *p = NULL;
}

aprenda a usar o gdb (ou o debug disponível do seu compilador) que ele será uma mão na roda nesse tipo de situação.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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...

minicurso-montagem-popup.jpg

MINICURSO GRÁTIS!

Como ganhar dinheiro montando computadores!

CLIQUE AQUI E INSCREVA-SE AGORA MESMO!