gpt4 book ai didi

C - 如何正确释放另一个结构内的结构

转载 作者:行者123 更新时间:2023-11-30 20:34:46 26 4
gpt4 key购买 nike

我在释放结构时遇到问题,我必须创建一个动态数组,读取数组数量以供进一步使用并释放分配的内存。

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 上分配的内存?

谢谢。

最佳答案

您的程序导致内存泄漏:您的程序正在分配一些内存并将其丢弃。

在函数 CrearTiendas() 中更改本地参数 p_cadena不会影响 中的本地变量>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

关于C - 如何正确释放另一个结构内的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com