ODE で tri-mesh を使うときはデータの解放を忘れずに

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 の代入は必須ではないが,メモリの二重解放を防止しやすくなったりできるのでおすすめ.