-4

如何为以下代码释放内存:我想将名称存储在下面给定结构结构标记的名称字段中,然后释放内存

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;
}
4

3 回答 3

2

调用你在循环中调用free(object)的相同对象mallocfor

于 2013-08-06T12:38:59.050 回答
1

您应该name在释放结构之前释放。

p = p1;
for(i=0; i<10; i++)
{
    free(p[i]->name);
    free(p[i]);
}
free(p1);

基本思想是你应该释放你分配内存的东西,按照允许你释放其他东西的顺序。

您还需要通过执行“重置”指向p原始地址的指针p = p1;

于 2013-08-06T12:40:30.990 回答
0

正如你在这里看到的那样

free(p);

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

于 2013-08-06T12:38:47.403 回答