Re: Excessive "fd" bytes at its tail of heap allocation
Jack wrote:
[code]
HRESULT CMesh::LoadMesh(const char *szfilename)
{
char szPath[1024];
CAllocateHierarchy Alloc;
PBYTE pMappedFileBase = NULL;
// unload these functions to a dll
GetModuleFileNameA(NULL, szPath, sizeof(szPath));
strcat (szPath, szfilename);
FILE *fp = fopen (szPath, "rb");
Does this succeed? szPath currently contains something like
c:\somepath\yourapp.exesomefilename
This is unlikely to refer to an actual file.
if (fp == NULL)
OutputDebugStringA("File open error\n");
__int64 si = FileSize64(szPath);
What's the value of si here? If szPath is in fact invalid, it's probably =
zeo.
int actlen = si-4;
And if si is zero, then actlen (when cast to unsigned int) is a very =
large value.
int size_template = sizeof(template_bin);
What's template_bin?
int j = actlen+size_template;
std::vector<BYTE> v2(j);
PBYTE pBin = &v2[0];
int x;
for (x = 0; x < size_template; x++)
{
pBin[x] = template_bin[x];
}
int i = 0;
for (; x < j;x++,i++)
{
pBin[x] = pMappedFileBase[i];
}
assert(x == j);
It appears that these two loops can be replaced with this:
memcpy(pBin, template_bin, size_template);
memcpy(pBin + size_template, pMappedFileBase, actlen);
// Build a new parser?
hr = D3DXLoadMeshHierarchyFromXInMemory((LPCVOID) pBin, j,
D3DXMESH_MANAGED, m_pDevice, &Alloc,
NULL, (LPD3DXFRAME*)&m_pFrameRoot, &m_pAnimController);
I don't know anything about Direct3D. However, I find it surprising that =
you are passing a pointer to a stack-allocated object (Alloc) where an =
interface pointer is required. It seems reasonable to expect that =
D3DXLoadMeshHierarchyFromXInMemory would want to AddRef this pointer and =
keep it around until such time as the mesh needs to be disposed of. But =
your object will die at the end of the function, regardless of its =
reference count.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not =
necessarily a good idea. It is hard to be sure where they are going to =
land, and it could be dangerous sitting under them as they fly overhead. =
-- RFC 1925