Han Solo
2003-08-14 11:35:01 UTC
Hola a todos.
Supongamos que tengo algo como esto
- -----8<-------8<-------8<-------8<-------8<-------8<-------8<-------
struct vector_float {
int nelems;
float *f;
};
struct curva {
int nelems;
float *x;
float *y
};
struct vector_float *inicia_vector (int);
struct curva *inicia_curva(struct vector_float *,struct vector_float *);
int main(){
struct vector_float *x,*y;
struct curva curva*;
x=inicia_vector(15);
y=inicia_vector(10);
curva=inicia_curva(x,y);
free(curva);
free(x);
free(y);
exit(0);
}
struct vector_float *inicia_vector(int n)
{
int i;
float *p;
struct vector_float *resultado;
resultado=(struct vector_float *)malloc(sizeof(*resultado));
p=(float *)malloc(n*sizeof(*p));
for (i=0;i<n;i++){
&p[i]=i/13; //por ejemplo,para que salga un float
}
resultado->f=p;
resultado->nelems=n;
return resultado;
}
struct curva *inicia_curva(struct vector_float vf_x*,struct
vector_float vf_y*)
{
struct curva *resultado;
resultado=(struct curva *)malloc(sizeof(resultado *));
resultado->nelems=vf_y->nelems;
resultado->x=vf_x->f;
resultado->y=vf_y->v;
return resultado;
}
- -----8<-------8<-------8<-------8<-------8<-------8<-------8<-------
Tengo un programa lleno de lindezas como estas, de estructuras
anidadas, y que van generando miles de estructuras como curva a lo
largo de la ejecución. El problema es que creo que el free no hace
nada. Sospecho que tendría que ir liberando hasta los 'arrays' de
'floats' que son los que finalmente ocupan la memoria, Pero tampoco
estoy seguro de esto.
Me gustaría saber si hay una manera de liberar todo de golpe; no me
aptece nada ponerme a hacer las funciones de limpieza...
P.S. Si a alguien le extrañan los 'cast' explícitos al llamar a
malloc(), es porque, aunque el programa está claramente desarrollado
en C, lo estoy compilando con el g++, ya que son funciones que luego
van en un programa en C++.
Gracias a todos por anticipado.
Un Saludo
- --
Han Solo
The Rebel Alliance
Emacs is not on every system
So what? [...] Do you tell your administrative people to stick with
notepad.exe? Do you tell your fat kids they can only have the crummy
games that come with the video games or plain dress that comes with
Barbie?
Supongamos que tengo algo como esto
- -----8<-------8<-------8<-------8<-------8<-------8<-------8<-------
struct vector_float {
int nelems;
float *f;
};
struct curva {
int nelems;
float *x;
float *y
};
struct vector_float *inicia_vector (int);
struct curva *inicia_curva(struct vector_float *,struct vector_float *);
int main(){
struct vector_float *x,*y;
struct curva curva*;
x=inicia_vector(15);
y=inicia_vector(10);
curva=inicia_curva(x,y);
free(curva);
free(x);
free(y);
exit(0);
}
struct vector_float *inicia_vector(int n)
{
int i;
float *p;
struct vector_float *resultado;
resultado=(struct vector_float *)malloc(sizeof(*resultado));
p=(float *)malloc(n*sizeof(*p));
for (i=0;i<n;i++){
&p[i]=i/13; //por ejemplo,para que salga un float
}
resultado->f=p;
resultado->nelems=n;
return resultado;
}
struct curva *inicia_curva(struct vector_float vf_x*,struct
vector_float vf_y*)
{
struct curva *resultado;
resultado=(struct curva *)malloc(sizeof(resultado *));
resultado->nelems=vf_y->nelems;
resultado->x=vf_x->f;
resultado->y=vf_y->v;
return resultado;
}
- -----8<-------8<-------8<-------8<-------8<-------8<-------8<-------
Tengo un programa lleno de lindezas como estas, de estructuras
anidadas, y que van generando miles de estructuras como curva a lo
largo de la ejecución. El problema es que creo que el free no hace
nada. Sospecho que tendría que ir liberando hasta los 'arrays' de
'floats' que son los que finalmente ocupan la memoria, Pero tampoco
estoy seguro de esto.
Me gustaría saber si hay una manera de liberar todo de golpe; no me
aptece nada ponerme a hacer las funciones de limpieza...
P.S. Si a alguien le extrañan los 'cast' explícitos al llamar a
malloc(), es porque, aunque el programa está claramente desarrollado
en C, lo estoy compilando con el g++, ya que son funciones que luego
van en un programa en C++.
Gracias a todos por anticipado.
Un Saludo
- --
Han Solo
The Rebel Alliance
Emacs is not on every system
So what? [...] Do you tell your administrative people to stick with
notepad.exe? Do you tell your fat kids they can only have the crummy
games that come with the video games or plain dress that comes with
Barbie?