Unresponsive screen

I think you got lucky. The issue won’t happen every time as it’s a typical use-after-free condition.

The correct approach to switch between two screens is as follows:

lv_obj_t * first = lv_obj_create(NULL, NULL);
lv_scr_load(first);
/* Later */
lv_obj_t * prev = lv_scr_act(); /* save previously active screen */
lv_obj_t * second = lv_obj_create(NULL, NULL);
lv_scr_load(second);
lv_obj_del(prev); /* prev is now not the active screen, so it can safely be deleted */