Correct choice is (d) heap
To explain I would say: Variables that gets created dynamically when a function (such as malloc()) is called is created in the form of heap data-structure. In heap-based overflow, the buffer is placed on the lower part of the heap, overwriting all dynamically generated variables.