c - Linked list containing other linked lists & free -


i have generic linked list implementation node struct containing void* data , list struct holds reference head. here problem node in linked list may hold reference linked list via void*. causes memory leaks when free bigger list containing smaller lists. wondering there way check if void* pointing list follow , free or data.

if add key beginning of struct magic number can check dereferencing void* , figure out list?

edit: callers don't insert smaller lists inserted functions not want callers deal relasing multiple lists 1 hold pointer to.

this question depends on responsibility clean entries in list. if struct responsible cleaning memory referenced void * fields, have bigger problem @ hand here, namely given void * referencing arbitrary block of memory can never know right way deallocate is. example, if have implementation of dynamic array along lines of c++ std::vector, void * might point @ struct contains pointer, , list need know has descend struct recursively free dynamically-allocated block. case you're describing, you're leaking nested list - special case of more general issue.

if, on other hand, list not responsible cleaning memory referenced void *s stores, shouldn't worry problem @ all.

if list have ownership semantics , required clean memory elements stored in it, discourage using magic number determine whether have nested list. rather, should have client provide function pointer containing deallocation routine run on elements inserted list. way, code can use user's provided cleanup code ensure elements stored in list cleaned up.


Comments

Popular posts from this blog

python - Scipy curvefit RuntimeError:Optimal parameters not found: Number of calls to function has reached maxfev = 1000 -

c# - How to add a new treeview at the selected node? -

java - netbeans "Please wait - classpath scanning in progress..." -