我知道这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...
}
显然以上只是一个片段,但一个片段却描绘了一千个单词。
这会造成内存泄漏吗?我知道调用 torealloc
将释放指针的内存,但我可以看到支持和反对仍然会有一堆内存被遗忘的可能性的论据。
可以通过在调用释放(现在为 NULL)指针之前合并int number_elements_new
到代码中并循环free
剩余的 s来规避泄漏。myStruct
realloc
如果realloc
做驴工作并释放所有相关的内存,那就太好了,否则我必须仔细检查以确保没有遗漏任何东西——myStruct
它本身包含分配的内存等等。
谢谢你的建议...