C/Visual C - No puedo liberar memoria

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 8 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo liberar memoria

Publicado por Rob (5 intervenciones) el 01/07/2019 22:34:49
Hola amigos; tengo el siguiente codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
 
typedef struct paramint
{
   short  val;
   char   name[150 + 1];
}tParamint;
 
int main(int argc, char *argv[]) {
	tParamint *e;
 
	e=(tParamint*)malloc(2*sizeof(tParamint));
	e[0].val=12;
	e[1].val=13;
 
	printf("e[0].val=[%d]\n", e[0].val);
	printf("e[1].val=[%d]\n", e[1].val);
    free(e);
	printf("e[0].val=[%d]\n", e[0].val);
	printf("e[1].val=[%d]\n", e[1].val);
 
	return 0;
}

Antes del free tengo:

1
2
e[0].val=[12]
e[1].val=[13]

Despues de free:

1
2
e[0].val=[12]
e[1].val=[13]

No se puede liberar la meoria para el puntero e

Por favor su ayuda para poder liberar memoria para el puntero e
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 9
Ha aumentado su posición en 8 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo liberar memoria

Publicado por Rob (5 intervenciones) el 01/07/2019 23:21:04
Tengo entendido que despues de free; el puntero va referenciar cualquier cosa pero no entiendo porque se mantiene los valores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo liberar memoria

Publicado por Rodrigo (119 intervenciones) el 01/07/2019 23:22:31
El uso o disponibilidad de la memoria es una marca en ella. Se marca o etiqueta la memoria como usada, para que si pides malloc de nuevo, quien sea que administra la memoria, no le de a otra peticion el mismo trozo de memoria y asi se protejan los datos alli guardados.
Cuando liberas la memoria, ella se marca como libre. No hay esfuerzo alguno por borrarle los datos. Podrian estar los mismos datos o no.

Si justo despues que liberas la memoria algun proceso paralelo pide memoria y recibe justo el trozo de memoria que antes ocupaba tu variable, la veras cambiar a nuevos valores, o 0, o lo que sea que este otro proceso haga.

Tu interes deberia ser solo el pedir, y liberar. Espiar despues no tiene ningun valor realmente.
Si quieres cambiar el valor, hazlo antes de liberar la memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 8 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo liberar memoria

Publicado por Rob (5 intervenciones) el 02/07/2019 00:10:38
Gracias Rodrigo....me quedo claro la respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No puedo liberar memoria

Publicado por Tom (619 intervenciones) el 02/07/2019 16:13:27
Es buena política poner a NULL el puntero al que haces free(); Es más fácil detectar que hay un error cuando tienes una SIGSEGV que cuando "cometes" use after free.

free(e);
e = NULL;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 8 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No puedo liberar memoria

Publicado por Rob (5 intervenciones) el 02/07/2019 17:12:04
Gracias Tom lo tendre en cuenta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar