必要に応じてメモリを解放することは知っていますrealloc
し、C の 3 番目のルールも知っています。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...
}
明らかに、上記はスニペットにすぎませんが、スニペットは千の単語を描きます。
これにより、メモリリークが発生しますか? を呼び出すとrealloc
ポインタのメモリが解放されることはわかっていますが、忘れ去られた大量のメモリがまだ存在する可能性については、賛否両論があります。
リークは、コードに組み込み、(現在は NULL の) ポインターを解放するために呼び出しを行う前に余分な sint number_elements_new
をループすることで回避できます。free
myStruct
realloc
ドンキーが機能し、関連するすべてのメモリを解放する場合realloc
、それは素晴らしいことmyStruct
です。
あなたの推薦をありがとう...