No sé por qué la función free() no libera el arreglo completamente, solamente elimina los dos primeros números. El código es el siguiente:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generar (float * vec);
void ver (float *vec);
void ascendente (float *vec);
void descendente (float *vec);
void ordenar (void (*operatoria) (float *vec), float *vec);
int main(int argc, char *argv[])
{
float *vec ;
int n;
srand(time(0));
vec=(float*) malloc (5*sizeof(float));
generar (vec);
ver (vec);
printf("-1-Si desea ordenar ascendente\t-2-Si desea ordenar descendente\n");
scanf("%d", &n);
if(n==1)
{
ordenar (ascendente, vec);
}
if(n==2)
{
ordenar (descendente, vec);
}
printf("\nLos numeros ordenados son:\n");
ver (vec);
free(vec); //Acá está la función free que tendría que eliminar todo el arreglo
printf("\nEl vector eliminado es:\n");
ver(vec);
system("PAUSE");
return 0;
}
void ver (float *vec)
{
int i;
for (i=0; i<5;i++)
{
printf("%.2f ", vec[i]);
}
printf("\n\n");
}
void generar (float * vec)
{
int i;
for (i=0; i<5;i++)
{
vec[i]=(rand()% 10+1);
}
}
void ascendente (float *vec)
{
int i, j;
float aux;
for (i=0;i<4;i++)
{
for (j=i+1;j<5;j++)
{
if(vec[i]<vec[j])
{
aux=vec[i];
vec[i]=vec[j];
vec[j]=aux;
}
}
}
return;
}
void descendente (float *vec)
{
int i, j;
float aux;
for(i=0;i<5-1;i++)
{
for(j=i+1;j<5;j++)
{
if(vec[i]>vec[j])
{
aux=vec[i];
vec[i]=vec[j];
vec[j]=aux;
} }}
return;
}
void ordenar (void (*operatoria) (float *vec), float *vec)
{
operatoria (vec);
return;
}