During my tests, I have found that it is possible to use pointer after free(). I have the following code:
typedef struct{
int module_id;
int adc_id;
Because freeing memory (a pointer) just puts back that memory on the free memory pool. The memory doesn't just disappear, and it's contents are not cleaned out till when that memory is allocated again and written to.
So, it is very much possible to access the memory after it's been freed up. Just not a good idea as you can imagine, because it can be allocated anytime, and modified.