C中的free()和struct

时间:2013-08-06 12:35:18

标签: 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++)
    {
        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;
}

3 个答案:

答案 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)

你可以通过

看到here
free(p);

注意不要释放未分配的内存,这样就不会让调试断言失败。