[рукалицо] И тут такие же умники.
Ладно, объясняю на пальцах. Для тех кому лень думать над прочитанным.
MyReallocMem добавляет к размеру +100 (условно), смещает указатель и вызывает OldMM.ReallocMem (которая на самом деле SysReallocMem)
SysReallocMem так устроена, что вызывает MemoryManager.MemSize. Которая УЖЕ мой враппер, вызывающий OldMM.MemSize, вычитающий 100 и возвращающий модифицированное значение. То есть, SysReallocMem уже получила шум океанов марса вместо того, чтобы вызвать SysMemSize напрямую и получить правильный размер расширенного блока.
После этого, SysReallocMem вызывает MemoryManager.GetMem - которая ОПЯТЬ ЖЕ мой враппер, добавляющий 100 перед вызовом OldMM.GetMem. То есть фактически мой враппер вызывается
дважды, превращая структуру выделенной памяти в кашу.
Программа работает не падая только если не освобождать память, закомментировав вызов OldMM.FreeMem в MyFreeMem. Иначе при первом же освобождении косого блока, порождённого двойным применением враппера, оно валится, пытаясь освободить блок по указателю на 100 байт правее реального начала блока.
ТЕПЕРЬ - ДОШЛО?
нормально все врапится...
На практике проверял?
не нравится, используй cmem
Кстати, идея.