如何为以下代码释放内存:我想将名称存储在给定的下面结构struct标签的name字段中,然后释放内存
SINT32 TestExample(void)
{
typedef struct tag
{
char *name;
} ST;
int i;
ST **p, **p1;
p = p1 = (ST **)calloc(1, 10 * sizeof(ST *));
for(i=0; i<10; i++)
{
p[0] = (ST *)calloc(1, 10 * sizeof(ST));
p[0]->name = (char *)malloc(20 * sizeof(char));
sprintf(p[0]->name, "Name_%d", i);
++p;
}
/* TO DO: free the memory allocated in previous block */
{
------------------------
}
p = NULL:
return 0;
}
答案 0 :(得分:2)
在free(object)
循环中呼叫您malloc
的相同对象上的for
答案 1 :(得分:1)
在释放结构之前,您应该释放name
。
p = p1;
for(i=0; i<10; i++)
{
free(p[i]->name);
free(p[i]);
}
free(p1);
基本思想是你应该释放你分配内存的东西,以允许你释放其他东西的顺序。
您还需要通过执行p
p = p1;
“重置”到原始地址
答案 2 :(得分:0)