我知道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 …