On 05/19/2011 06:34 PM, Dylan Smith wrote:
On Thu, May 19, 2011 at 6:16 AM, Joris Huizer<joris_hui...@yahoo.com> wrote:
Hello,
I found a possibly memory leak in the patch.
In this function:
+static HRESULT parse_mesh(IDirectXFileData *filedata, struct mesh_data
*mesh_data, DWORD provide_flags)
These may leak the allocated blocks:
+
+ mesh_data->vertices = HeapAlloc(GetProcessHeap(), 0,
+ mesh_data->num_vertices * sizeof(*mesh_data->vertices));
+ mesh_data->num_tri_per_face = HeapAlloc(GetProcessHeap(), 0,
+ mesh_data->num_poly_faces * sizeof(*mesh_data->num_tri_per_face));
+ mesh_data->indices = HeapAlloc(GetProcessHeap(), 0,
+ (mesh_data->num_tri_faces + mesh_data->num_poly_faces * 2) *
sizeof(*mesh_data->indices));
+ if (!mesh_data->vertices || !mesh_data->num_tri_per_face ||
!mesh_data->indices)
+ return E_OUTOFMEMORY;
+
All the pointers are stored in mesh_data, which isn't lost. They are
freed at the end of load_skin_mesh_from_xof.
+cleanup:
+ if (FAILED(hr)) {
+ if (d3dxmesh) IUnknown_Release(d3dxmesh);
+ if (adjacency) ID3DXBuffer_Release(adjacency);
+ }
+ HeapFree(GetProcessHeap(), 0, mesh_data.vertices);
+ HeapFree(GetProcessHeap(), 0, mesh_data.num_tri_per_face);
+ HeapFree(GetProcessHeap(), 0, mesh_data.indices);
+ return hr;
+}
Thanks for clarification (Sorry for the noise)