C中的free()和struct

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++) {

如何为以下代码释放内存:我想在下面给定的结构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;
}
正如你所看到的那样

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++不是必需的