dynamic memory management exercises