我在释放结构时遇到问题,我必须创建一个动态数组,读取数组的数量以供进一步使用并释放分配的内存。
typedef struct
{
tContacto contacto;
int n_tiendas;
tTienda *p_tiendas;
}tCadena;
main()
{
tCadena cadena;
if (CrearTiendas(&cadena)==-1)
//More code, no problem here
LiberaMemoria(cadena); //Function for freeing memory
return 0;
}
int CrearTiendas(tCadena *p_cadena)
{
int numero;
printf("Introduce el numero de tiendas:\t"); //Asking for number
scanf("%d",&numero);
if((p_cadena=(tCadena *)malloc(numero*sizeof(tCadena)))!=NULL)
{
return 0;
}
else
{
return -1;
}
}
void LiberaMemoria(tCadena cadena)
{
free(cadena); //Obviously this isn't correct, it's not a pointer
}
因此,我自己编写的唯一内容是LiberaMemoria()
函数。
如何正确释放p_cadena
上分配的内存?
谢谢。
答案 0 :(得分:0)
您的程序导致内存泄漏:您的程序正在分配一些内存并将其丢弃。
在p_cadena
函数中更改为本地参数CrearTiendas()
,不会影响main()
中的局部变量。
应该对代码做些什么是停止导致内存泄漏:不要仅仅因为导致内存泄漏而进行分析。
int CrearTiendas(tCadena *p_cadena)
{
int numero;
printf("Introduce el numero de tiendas:\t"); //Asking for number
scanf("%d",&numero);
return 0;
}
不幸的是,您说您只能编辑LiberaMemoria()
。然后,不要做任何事情来释放泄漏的内存并让操作系统释放内存。
void LiberaMemoria(tCadena cadena)
{
}
参考:c - What REALLY happens when you don't free after malloc? - Stack Overflow
答案 1 :(得分:0)
问题在于内存分配,正确的形式是:
p_cadena->p_tiendas=(tTienda *)malloc(numero*sizeof(tTienda)
和自由功能:
void LiberaMemoria(tCadena cadena)
{
free(cadena.p_tiendas);
}