1. Dynamic memory is allocated on the (A) stack, (B) heap, (C) region storing program code, (D) A and B.
2. If malloc is called repeatedly and its returned value is assigned to the same pointer variable, (A) a single memory block is allocated, (B) multiple blocks are allocated, (C) heap may become full, (D) B and C.
3. If a memory block is not freed, (A) a memory leak occurs, (B) a dangling pointer is created, (C) it is automatically cleared on program termination, (D) B and C, (E) A and C.
4. realloc returns a pointer (A) to the existing allocated block, (B) that is different from the existing block, (C) that may or may not be different from the existing block, (D) that may be NULL, (E) C and D.