realloc和mallocs的幽灵过去了

Cha*_*son 0 c free realloc

我知道realloc必要时会释放记忆,而且我知道C的第三条规则 - "每一个malloc必须有一个平等和相反的free"......但这两个如何一起工作?

最好在代码中描述这种情况:

int main()
{
    myStruct **myStructArray;
    int      i, num_elements;

    num_elements = getnumber(); // gets value for num_elements

    myStructArray = (myStruct **) malloc(num_elements * sizeof(myStruct*));
    for (i=0; i<num_elements; i++)
        myStructArray[i] = (myStruct *) malloc(sizeof(myStruct));

    // so far so good...

    num_elements = getnumber(); // gets new, LOWER value

    myStructArray = realloc(myStructArrary, num_elements * sizeof(myStruct*));

    // rest_of_code, and necessary free loop for myStructArray etc...
}
Run Code Online (Sandbox Code Playgroud)

显然,上面只不过是一个片段,但是一个片段描绘了千言万语.

这会造成内存泄漏吗?我知道调用realloc将释放指针的内存,但我可以看到赞成和反对可能存在一堆内存被遗忘的可能性.

在调用释放(现在为NULL)指针之前,可以通过合并int number_elements_new到代码中并循环free多余的myStructs 来规避泄漏realloc.

如果realloc驴工作和释放所有相关的内存是很好的,否则我必须拖网以确保没有遗漏 - myStruct本身包含分配的内存等等.

谢谢你的建议......

Oli*_*rth 6

malloc,realloc并且free不知道正在使用什么内存.如果你正在使用内存来存储指向其他动态分配内存的指针,那么你可以整理一下!


另请注意,您realloc在代码段中使用的方式可能不安全.如果realloc失败,则会使原始内存未释放,然后返回NULL.最佳做法是将返回值分配给临时指针,然后检查.参见例如http://www.c-faq.com/malloc/realloc.html.