I encountered situation when shared library was opened dlopen(), dlsym() was use to get function pointer, that function register function and data addresses in global data structure, dlclose() was called, but functions and data from shared library were used after that. I'll be great if Valgrind will detect such invalid coding patterns, but I'm not sure if dl allow to get data/code segments addresses as well as reserve closed segments from re-using for later check in Valgrind.