Quantcast
Channel: Comunidad Underground Hispana
Viewing all articles
Browse latest Browse all 11602

Liberación de memoria

$
0
0
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;
      }


Viewing all articles
Browse latest Browse all 11602

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>