いや、まじめな話、「一般的には」だけれど、

関数内だけで使うローカルな領域をmallocすることなんてそんなに多くないでしょ。
多くは、構造体のメンバとかに置いて、外部とのやり取りに使うためのもの。
だから、後でfreeするための元のアドレスはそのメンバが持っていて
個々の関数ではその値のコピーを使って操作することの方が多いでしょ。
いや、(コピーじゃなくて)直接使うケースが少ないとは言わないけどさ。

で、まあ、確かにローカルで使用するにしても
不定長のバッファなんかは必要ではある。
ただ、この用途は(C++で済まんが)vectorばっか使ってるから
malloc(operator new)することなんか殆ど無いし。

特に、配列として確保したもの(1個のオブジェクトではなく)は
ループを回したりするわけだから、コピーしてレジスタ割付なんかも期待したいところ。
そんな変数を増減するのは、ちっとも不思議じゃなく当たり前の話じゃないかね。