2010年1月26日火曜日

OpenBabelでOBMolインスタンスのコピー

OpenBabelでOBMolのインスタンスをコピーする時、デバッグに苦労する現象に遭遇しました。

OBMol mol1 = new OBMol();
OBMol mol2 = new OBMol();
(この間、mo1,2lの操作をする)
mol1 = mol2;

この代入でエラーは出ませんが、mol1のインスタンスは非常に不安定で、突然消えたりします。

これは、mol1のインスタンスのメモリー領域がmol2で上書きされることで、(おそらく)mol1のポインターが確保されないまま操作されていることによります。たちの悪いことに、この操作でのエラーは何も出ません。

mol1にmol2を上書きする場合は

mol1 = new OBMol(mol2)

として、mol1をちゃんと初期化してmol2をコピーしましょう。

これが原因で10日ほど悩みました。

0 件のコメント: