2013-11-21
ODE (Open Dynamics Engine) で tri-mesh (三角形メッシュ) を使うとき,dGeomTriMeshDataCreate で確保したデータを,dGeomTriMeshDataDestroy で破棄するのを忘れてはならない.破棄しなければ,メモリリークの原因となる(特に,シミュレーションのリセットを何度も繰り返す場合).
例えば,以下のようなコードで tri-mesh を作成したとする. source from ode/demo/demo_trimesh.cpp:
dTriMeshDataID Data = dGeomTriMeshDataCreate();
dGeomTriMeshDataBuildSingle(Data, Vertices[0], 3 * sizeof(float), VertexCount, &Indices[0], IndexCount, 3 * sizeof(dTriIndex));
TriMesh = dCreateTriMesh(space, Data, 0, 0, 0);
このとき,dGeomTriMeshDataCreate で確保した Data は,使い終わったら,dGeomTriMeshDataDestroy で破棄する必要がある.Data の型 dTriMeshDataID は一種のポインタ型.
if(Data) dGeomTriMeshDataDestroy(Data);
Data= NULL;
なお,if のチェックと NULL の代入は必須ではないが,メモリの二重解放を防止しやすくなったりできるのでおすすめ.