>テストコードのつもりで書いたのがデグレで混入してしまったり、
>5万行くらい書いてると、完璧だって言い切るのは難しくなるでしょ?

それを言い始めたら「プログラムが正しいことの証明」ってことになって不可能。
できるだけおきないようにする。とか、おきたら検出できるようにする。
ってするしか。

C/C++ では、歴史的に文字列バッファをスタック上の Char 配列でとるコードが使われており、
それを長さチェックなしで操作しているコードが多くあったので問題が出た。

Delphi だと文字列型はヒープだし、範囲チェックを ON にすれば配列オーバーランも実行時検出できる。

実際のところ、C# / Java でも「不正メモリアクセスを検出」することができるだけで、それはうまく使えば
DOS (サービス不能攻撃) を起こすことができるわけで、そこまで行ったらやはりアプリ側での対応の問題となるでしょ。