Каждая функция может использовать стек, даже если некоторые Dont вы получите вложенности вызовов функций в программах одного() вызывает два() два вызова три() и т.д.
Таким образом, если функция имеет один местный переменные A, B, C в стеке, тогда он вызывает два, два имеют две переменные, которые используют E и F в стеке. Затем три имеют G и H в стеке. Если вы не восстановите указатель стека туда, где он был, когда три введены, когда вы вернетесь к двум, он будет думать, что он обращается к E и F, но вместо этого будет обращаться к G и H или к чему-то еще в зависимости от фрейма стека для трех().
Вы не получаете утечку памяти, вы получаете краху. Иногда вам повезло и выжить, это может быть характер кода для этих функций, но в целом это вызовет ваш скомпилированный код для функций более высокого уровня, которые заставили вас потерпеть неудачу.
Теперь это утечка памяти как в том смысле, что одна функция уничтожает кого-то elses ram, конечно.
В случае процессоров, которые используют стек для возвращаемых значений, это только ухудшает ситуацию, а крушение или странное поведение более гарантировано и хуже.
«утечка памяти» обычно означает потерю указателя, потому что стек фактически очищается (компилятор принудительно). Если бы пользователь мог очистить стек (как и при сборке), то на самом деле можно было бы также утечить стек стека, и мы бы действительно говорили о «утечке памяти стека» и «утечке памяти кучи». –