So, what is that 114 odd blocks of RAM that don't get freed after calling NewtonDestroy? In my engine, I'd like to NewtonCreate at the beginning of each map and NewtonDestroy at the end.
Upon first incorporating Newton, just calling NewtonCreate and nothing else before calling NewtonDestroy, I see a DevStudio leak report so, I setup the following to briefly test if any of the blocks had been molested at least in the first four bytes...
- Code: Select all
int iGblock=0;
// memory allocation for Newton
void* PhysicsAlloc (int sizeInBytes)
{
iGblock++;
void* p = malloc(sizeInBytes);
memset( p, 0, sizeInBytes);
*((int*)p) = iGblock;
return p;
}
// memory de-allocation for Newton
void PhysicsFree (void *ptr, int sizeInBytes)
{
iGblock--;
free (ptr);
}
NewtonWorld* CEngine::PhysicsInit(void)
{
// /////////////////////////////////////////////////////////////////////
//
// create the newton world
m_pNewtonWorld = NewtonCreate(PhysicsAlloc, PhysicsFree);
return m_pNewtonWorld;
}
void CEngine::ReleaseResources(void)
{
if(m_pNewtonWorld)
{
// destroy the Newton world
NewtonDestroy(m_pNewtonWorld);
}
}
I'm thinking that somewhere in the early code near the NewtonCreate function, there are pointer objects being overwritten due to redundant calls to PhysicsAlloc because the resulting pattern is as follows:
- Code: Select all
Dumping objects ->
{1405} normal block at 0x0169BAE0, 72 bytes long.
Data: < > 8B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1404} normal block at 0x0169AA80, 4128 bytes long.
Data: < > 8A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1403} normal block at 0x0169A890, 72 bytes long.
Data: < > 89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1402} normal block at 0x01699830, 4128 bytes long.
Data: < > 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1401} normal block at 0x00B3B430, 68 bytes long.
Data: < > 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1400} normal block at 0x00B3B3B0, 68 bytes long.
Data: < > 86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1399} normal block at 0x0166A158, 40 bytes long.
Data: < > 85 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1358} normal block at 0x0169BC50, 68 bytes long.
Data: < > 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1357} normal block at 0x0169BBD0, 68 bytes long.
Data: < > 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1356} normal block at 0x0169BB68, 40 bytes long.
Data: < > 86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1353} normal block at 0x0169AA00, 68 bytes long.
Data: < > 83 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1352} normal block at 0x0169A980, 68 bytes long.
Data: < > 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1351} normal block at 0x0169A918, 40 bytes long.
Data: < > 81 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1348} normal block at 0x016997B0, 68 bytes long.
Data: <~ > 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1347} normal block at 0x01699730, 68 bytes long.
Data: <} > 7D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1346} normal block at 0x016996C8, 40 bytes long.
Data: <| > 7C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1341} normal block at 0x01699648, 68 bytes long.
Data: <{ > 7B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1340} normal block at 0x016995C8, 68 bytes long.
Data: <z > 7A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1339} normal block at 0x01699560, 40 bytes long.
Data: <y > 79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1337} normal block at 0x01699300, 548 bytes long.
Data: <x > 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1336} normal block at 0x01699280, 68 bytes long.
Data: <w > 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1335} normal block at 0x01699200, 68 bytes long.
Data: <v > 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1334} normal block at 0x01699198, 40 bytes long.
Data: <u > 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1330} normal block at 0x01698030, 68 bytes long.
Data: <q > 71 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1329} normal block at 0x01697FB0, 68 bytes long.
Data: <p > 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1328} normal block at 0x01697F48, 40 bytes long.
Data: <o > 6F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1327} normal block at 0x01697EC8, 68 bytes long.
Data: <n > 6E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1326} normal block at 0x01697E48, 68 bytes long.
Data: <m > 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1325} normal block at 0x01697DE0, 40 bytes long.
Data: <l > 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1322} normal block at 0x01696048, 68 bytes long.
Data: <i > 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1321} normal block at 0x01695FC8, 68 bytes long.
Data: <h > 68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1320} normal block at 0x01695F60, 40 bytes long.
Data: <g > 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1319} normal block at 0x01695EE0, 68 bytes long.
Data: <f > 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1318} normal block at 0x01695E60, 68 bytes long.
Data: <e > 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1317} normal block at 0x01695DF8, 40 bytes long.
Data: <d > 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1314} normal block at 0x01692460, 68 bytes long.
Data: <a > 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1313} normal block at 0x016923E0, 68 bytes long.
Data: <` > 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1312} normal block at 0x01692378, 40 bytes long.
Data: <_ > 5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1311} normal block at 0x016922F8, 68 bytes long.
Data: <^ > 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1310} normal block at 0x01692278, 68 bytes long.
Data: <] > 5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1309} normal block at 0x01692210, 40 bytes long.
Data: <\ > 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1306} normal block at 0x0168E878, 68 bytes long.
Data: <Y > 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1305} normal block at 0x0168E7F8, 68 bytes long.
Data: <X > 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1304} normal block at 0x0168E790, 40 bytes long.
Data: <W > 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1303} normal block at 0x0168E710, 68 bytes long.
Data: <V > 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1302} normal block at 0x0168E690, 68 bytes long.
Data: <U > 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1301} normal block at 0x0168E628, 40 bytes long.
Data: <T > 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1298} normal block at 0x0168AC90, 68 bytes long.
Data: <Q > 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1297} normal block at 0x0168AC10, 68 bytes long.
Data: <P > 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1296} normal block at 0x0168ABA8, 40 bytes long.
Data: <O > 4F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1295} normal block at 0x0168AB28, 68 bytes long.
Data: <N > 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1294} normal block at 0x0168AAA8, 68 bytes long.
Data: <M > 4D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1293} normal block at 0x0168AA40, 40 bytes long.
Data: <L > 4C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1290} normal block at 0x016870A8, 68 bytes long.
Data: <I > 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1289} normal block at 0x01687028, 68 bytes long.
Data: <H > 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1288} normal block at 0x01686FC0, 40 bytes long.
Data: <G > 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1287} normal block at 0x01686F40, 68 bytes long.
Data: <F > 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1286} normal block at 0x01686EC0, 68 bytes long.
Data: <E > 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1285} normal block at 0x01686E58, 40 bytes long.
Data: <D > 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1282} normal block at 0x016834C0, 68 bytes long.
Data: <A > 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1281} normal block at 0x01683440, 68 bytes long.
Data: <@ > 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1280} normal block at 0x016833D8, 40 bytes long.
Data: <? > 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1279} normal block at 0x01683358, 68 bytes long.
Data: <> > 3E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1278} normal block at 0x016832D8, 68 bytes long.
Data: <= > 3D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1277} normal block at 0x01683270, 40 bytes long.
Data: << > 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1274} normal block at 0x0167F0D8, 68 bytes long.
Data: <9 > 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1273} normal block at 0x0167F058, 68 bytes long.
Data: <8 > 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1272} normal block at 0x0167EFF0, 40 bytes long.
Data: <7 > 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1271} normal block at 0x0167EF70, 68 bytes long.
Data: <6 > 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1270} normal block at 0x0167EEF0, 68 bytes long.
Data: <5 > 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1269} normal block at 0x0167EE88, 40 bytes long.
Data: <4 > 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1268} normal block at 0x0167EE08, 68 bytes long.
Data: <3 > 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1267} normal block at 0x0167ED88, 68 bytes long.
Data: <2 > 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1266} normal block at 0x0167ED20, 40 bytes long.
Data: <1 > 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1263} normal block at 0x0167D788, 68 bytes long.
Data: <. > 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1262} normal block at 0x0167D708, 68 bytes long.
Data: <- > 2D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1261} normal block at 0x0167D6A0, 40 bytes long.
Data: <, > 2C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1260} normal block at 0x0167D620, 68 bytes long.
Data: <+ > 2B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1259} normal block at 0x0167D5A0, 68 bytes long.
Data: <* > 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1258} normal block at 0x0167D538, 40 bytes long.
Data: <) > 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1255} normal block at 0x016757A0, 68 bytes long.
Data: <& > 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1254} normal block at 0x01675720, 68 bytes long.
Data: <% > 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1253} normal block at 0x016756B8, 40 bytes long.
Data: <$ > 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1252} normal block at 0x01675638, 68 bytes long.
Data: <# > 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1251} normal block at 0x016755B8, 68 bytes long.
Data: <" > 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1250} normal block at 0x01675550, 40 bytes long.
Data: <! > 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1249} normal block at 0x016754D0, 68 bytes long.
Data: < > 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1248} normal block at 0x01675450, 68 bytes long.
Data: < > 1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1247} normal block at 0x016753E8, 40 bytes long.
Data: < > 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1246} normal block at 0x01675368, 68 bytes long.
Data: < > 1D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1245} normal block at 0x016752E8, 68 bytes long.
Data: < > 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1244} normal block at 0x01675280, 40 bytes long.
Data: < > 1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1243} normal block at 0x01675200, 68 bytes long.
Data: < > 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1242} normal block at 0x01675180, 68 bytes long.
Data: < > 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1241} normal block at 0x01675118, 40 bytes long.
Data: < > 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1239} normal block at 0x01675028, 68 bytes long.
Data: < > 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1238} normal block at 0x01674FA0, 68 bytes long.
Data: < > 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1237} normal block at 0x01674F38, 40 bytes long.
Data: < > 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1234} normal block at 0x01673DD0, 68 bytes long.
Data: < > 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1233} normal block at 0x01673D50, 68 bytes long.
Data: < > 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1232} normal block at 0x01673CE8, 40 bytes long.
Data: < > 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1231} normal block at 0x01673C68, 68 bytes long.
Data: < > 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1230} normal block at 0x01673BE8, 68 bytes long.
Data: < > 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1229} normal block at 0x01673B80, 40 bytes long.
Data: < > 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1227} normal block at 0x016737B8, 72 bytes long.
Data: < > 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1226} normal block at 0x01672758, 4128 bytes long.
Data: < > 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1225} normal block at 0x016726D0, 72 bytes long.
Data: < > 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1224} normal block at 0x01670750, 8000 bytes long.
Data: < > 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1223} normal block at 0x016706D0, 68 bytes long.
Data: < > 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1222} normal block at 0x01670650, 68 bytes long.
Data: < > 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1221} normal block at 0x016704F8, 40 bytes long.
Data: < > 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1220} normal block at 0x016705D0, 68 bytes long.
Data: < > 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1219} normal block at 0x01670478, 68 bytes long.
Data: < > 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{1218} normal block at 0x01670410, 40 bytes long.
Data: < > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
Any thoughts?