В Windows есть защитная страница между стеком и кучей, поэтому куча и стек никогда не касаются. Это делается из соображений безопасности (поэтому ошибка исчерпания стека не может привести к более уязвимой ошибке переполнения кучи).
Если вы спрашиваете, что происходит, когда куча заполняется, простой ответ заключается в том, что ваши вызовы malloc (или HeapAlloc или что-то еще) начнут возвращать NULL. Если вы спрашиваете, что происходит, когда стек заполняется, вы получаете исключение исчерпания стека (иногда ошибочно называемое переполнением стека). В любом случае это обычно приводит к тому, что программа освобождает память и продолжает работу или выходит на рабочий стол.