Estoy inciado en el lenguaje C gracias a una asignatura del instituto y utilizo borlandc 3.1 para programar y tengo un pequeño programa que utiliza la función realloc, el programa consiste en que un usuario introduzca unos valores en un puntero y que una función calcule la media el valor mayor y el menor.
El problema viene ahora, los calculos de la media el valor mayor y el menos són correctos, pero cada vez que el usuario introduce un valor el vector se "realoja" con la función realloc ganando asà un espació adicional y asà sucesivamente hasta que el usuario decide parar de introducir valores, a modo de ir reservando memòria y no tener que dar un vector limitado.
El problema viene que al ejecutar la linea con la función realloc por quinta vez el puntero pierde la mayoria de sus valores, alguien sabe cual es el problema?
Les dejo aqui el pequeño programa, si no entienden algo pregunten.
Gracias.
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void valors(int*,float*,int);
void main(void){
int x=0, y=0, *xifres;
//x= cantidad de numeros introducidos, xifres= puntero que contiene los numeros introducidos
float result[3];
//result= resultados de media, mayor valor y menor valor respectivamente
clrscr();
xifres=(int *) malloc(1);
printf("Introdueix les xifres, introdueix un nombre negatiu per acabar");
do{
scanf("\n%d",&y);
if(y>=0){
*(xifres+x)=y;
xifres= (int*) realloc(xifres,1+x);
x++;
}
}while(y>=0);
valors(xifres,result,x);
//Printa los resultados
printf("El valor mitj… del vector ‚s: %f", result[0]);
printf("\nEl valor m…xim del vector ‚s: %f", result[1]);
printf("\nEl valor m¡nim del vector ‚s: %f", result[2]);
getch();
}
void valors(int *xifres,float *result, int x){
int z;
float k, y=0;
//Calcula la media aritmética
for(z=0;z<x;z++)
y=y+*(xifres+z);
*result=y/x;
//Calcula el valor mà ximo
for(z=0;z<x;z++){
if(z+1<x){
if(z==0){
if(*(xifres+z)>*(xifres+z+1))
y=*(xifres+z);
else
y=*(xifres+z+1);
}
if(y>*(xifres+z+1))
y=y;
else
y=*(xifres+z+1);
}
}
*(result+1)=y;
//Calcula el valor mÃnimo
for(z=0;z<x;z++){
if(z+1<x){
if(z==0){
if(*(xifres+z)<*(xifres+z+1))
y=*(xifres+z);
else
y=*(xifres+z+1);
}
if(y<*(xifres+z+1))
y=y;
else
y=*(xifres+z+1);
}
}
*(result+2)=y;
}