Да, tree->root->l
будет освобожден, потому что aux
указывает на ту же память. У вас есть два указателя, указывающие на одну и ту же область памяти. Передача любого указателя на free()
освободит память, на которую они оба указывают.
Вы избегаете этого, не передавая указатель free, указывающий на область памяти, которую вы не хотите освобождать.
Звучит так, будто вы спрашиваете, как использовать aux
, чтобы указывать на что-то еще, не освобождая tree->root->l
. Для этого вы можете просто переназначить aux
:
aux = some_other_pointer;
Нет необходимости освобождать что-либо, пока вы сохраняете указатель где-то , который все еще указывает на память, которую вам нужно будет освободить позже.
Из ваших комментариев: «У меня была идея, что вам нужно освободить все переменные, когда вы закончите с ними». Это почти правильно. Вы должны освободить всю динамически выделенную память. Вам не нужно пытаться освободить то, что не было выделено, с помощью звонка на malloc
, поэтому нет необходимости звонить free
на aux
. Вам нужно будет вызвать free
для каждого элемента в двоичном дереве в какой-то момент, но у вас все еще есть указатель root
, чтобы отслеживать все это, и вы можете очистить его в конце программы или когда вы больше не будете нужно дерево.