C中的free()和struct
如何为以下代码释放内存:我想在下面给定的结构struct标记的name字段中存储名称,然后释放内存C中的free()和struct,c,C,如何为以下代码释放内存:我想在下面给定的结构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++) {
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;
}
正如你所看到的那样
free(p);
小心不要释放未分配的内存,这样调试断言就不会失败。在for循环中调用malloc的相同对象上调用freeobject在释放结构之前,应该释放name
p = p1;
for(i=0; i<10; i++)
{
free(p[i]->name);
free(p[i]);
}
free(p1);
基本的想法是,你应该释放你分配给内存的东西,以允许你释放其他东西的顺序
您还需要通过执行p=p1将指针p重置为原始地址 您还需要释放for循环范围内的内存。您指定的位置不够。我认为您不应该在p[I]索引循环中同时增加I和p。freep不起作用。这意味着在VisualStudio上调试断言失败。然而,freep1[i]正在工作,但所有内存都不工作freed@user2656773您正在释放未分配给注释的内存。只有当p被p1替换时,上面的代码才能正常工作,不会出现内存泄漏。我不能理解..我刚刚意识到你需要重置指针p,因为你用++p修改了它。我的编辑现在应该可以工作了。谢谢你的帮助。代码是无泄漏的:fori=0;i<10;i++{freep1[i]>name;freep1[i];p++;}freep1不客气!另外,我刚刚意识到p++不是必需的