初めて書き込みます。
デバッグ版で動くという事は基本的なコードの誤りは無いのでしょう。
リリース版のみで異常終了し、トレース文などを入れると終了する場所が変わったり正常動作するというのは何度か経験があります。
原因は28の人が書いてあるとおりだと思います。

例えばこんな感じ
long CalcArraySize(long& lArraySize); // 宣言
(略)
long lArraySize; // すぐにCalcArraySizeで値が設定されるので初期化しない
CalcArraySize(lArraySize); // ここで配列の必要サイズが取得されるはずだが、エラーだと不定値のまま
m_pClass = new CMyClass[lArraySize]; // 万が一lArraySizeが不定値だと異常終了するかもしれない

オート変数でも宣言時に初期化すればデバッグ版とリリース版で挙動が異なる事は少なくなるはずです。
でも今更全ての変数に初期化文を入れるなんて現実的じゃないかもしれませんね。

P.S.
複数のDLLを使用するアプリで、デバッグ版とリリース版のDLLが混合しているとかないですよね?
そういうのが考慮された造りなら問題ないけど、何も考えていないとメモリの取得や開放で異常終了します。