C:释放每一个malloc还是只放一个主要的?

时间:2011-05-12 22:40:58

标签: c pointers malloc free

我有一个指针*** resultSet,我将其作为参数传递给我的SQL函数,该函数从数据库中读取未知数量的数据。数据的实际处理发生在函数之外。

当清理这个指针构造时,我是否只需释放一次主指针并且free找到所有后续分配,或者我是否必须释放我创建的每个malloc?

while((row = mysql_fetch_row(result))) {

                // allocating the rows pointer
                resultSet = malloc(sizeof(void)*(int)mysql_num_rows);
                (*rows)++;

                for (i=0 ; i < mysql_num_fields(result); i++)               
                {
                // allocating the fields pointer
                *(resultSet+i) = malloc(sizeof(void)*(int)mysql_num_fields);

                // allocating the character pointer
                **resultSet = malloc(sizeof(char)*strlen(row[i])+1);
                (*fields)++;

                snprintf(**resultSet, strlen(row[i])+1, "%s", row[i]);
                printf("%s\t",**resultSet);
                if (i==6)
                {
                printf("\t %s\n",**resultSet);
                }
                }
    }

4 个答案:

答案 0 :(得分:9)

作为一般规则,对于每个malloc(),您都有free()

答案 1 :(得分:1)

  

free()释放ptr指向的内存空间,该内存空间必须由之前调用malloc()calloc()realloc()返回。< / p>

它完全按照它的说法 - 释放指向的内存。它不会查看存储在存储器中的内容;它不知道任何其他分配的内存。它只是释放你告诉它的东西。所以,正如其他人所说,如果你想释放你分配的所有内存,你必须free malloc编辑的所有内容。

(也许你在考虑C ++的更复杂的行为,当你破坏一个对象时,它的成员也会被破坏?)

答案 2 :(得分:0)

您必须为您声明的每个free()致电malloc()以防止内存泄漏。

答案 3 :(得分:0)

您需要基本上反向工作并释放每个分配。