Я игнорирую значение realloc, так как уверен, что realloc всегда будет на одном и том же указателе.Выделение / перераспределение из моего собственного пула памяти, который довольно большой.
В коде, использующем стандартный интерфейс malloc / realloc / free, вы просто не можете сделать это предположение, , даже если вы думаете, что предоставили реализацию и знаете, как она будет себя вестив контролируемых условиях.Будущие люди, работающие над вашим кодом (включая вас самих, спустя годы после того, как вы забыли подробности этого проекта), предположат, что нет ничего особенного в том, как ваш код использует стандартные интерфейсы, и они могут перенести код в совершенно иную реализацию C, не привносяваша специальная библиотека malloc.
Кроме того, библиотека C имеет право отказать вам в замене этих функций, что и вызывает вашу непосредственную проблему: valgrind принудительно заменяет свою собственную реализацию malloc / realloc / free на любыеу вас была реализация, которая никогда не возвращает один и тот же указатель из realloc.Это специально для того, чтобы отлавливать ошибки, подобные этой.
Если вы хотите реализовать пул памяти, который дает такие гарантии, как «изменение размера выделения не перемещает выделение», то вам нужно предоставить всефункционирует новые имена (например, pool_alloc
, pool_resize
, pool_free
).