vorbisencとalloca()

vorbis_file_testでBorlandCodeWarriorがアクセス違反になる件を調べています。
デバッガで覗いてみると、libvorbisの内部でヌルポインタにアクセスして落ちています。
ヌルポインタの発生元を辿っていくと、alloca()が0を返していることが分かりました。
コンパイラ付属のCodeGuard(メモリ破壊、リソースリーク系バグ検出ツール)を信用すれば、スタックを壊している気配はありません。
ということは本当にスタックが足りないのかなと考え、スタックサイズを変更してみたりもしましたが効果なしでした。
もしかしてBorlandだとlibvorbis自体動かないんじゃないかと思い、サンプルのencoder_exampleを動かしてみたら、やはり同じところで落ちました。
alloca()が駄目っぽいので、libvorbisのヘッダを書き換えて、

#  include <malloc.h>

#  include <malloc.h>
#undef alloca
#define alloca(n) malloc(n)

にしたところ、動きました。メモリリークしまくりですけどね。


もちろん、これでは解決になりません。
Borlandのalloca()が原因なら、VC++でlibvorbisのDLLを作って呼べばいけるハズ。
なんですが、DLLを呼んでもダメ、、、。(08/08追記: 別の箇所でクラッシュしている模様)
というわけで、完全に詰まってしまいました。
そもそもlibvorbis単体で動かないので、これ以上追っても仕方がない気もします。
ちなみに、動かないのはエンコーダだけで、デコーダは動きます。再生だけなら問題ありません。