我知道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本身包含分配的内存等等.
谢谢你的建议......
malloc,realloc并且free不知道正在使用什么内存.如果你正在使用内存来存储指向其他动态分配内存的指针,那么你可以整理一下!
另请注意,您realloc在代码段中使用的方式可能不安全.如果realloc失败,则会使原始内存未释放,然后返回NULL.最佳做法是将返回值分配给临时指针,然后检查.参见例如http://www.c-faq.com/malloc/realloc.html.