How Dynamic Memory Works
Dynamic memory, called the heap, is allocated only as much as needed while a program runs. malloc reserves however many bytes are needed, and free releases a region once it's no longer needed. A freed region can later be reused by another malloc, but allocating and freeing repeatedly can leave free space scattered — a problem called fragmentation.
After freeing the 4 cells allocated as block 1, what happens when you call malloc(3)?