Похоже, вы предполагаете, что realloc()
будет повторно использовать память, на которую указывает entries
. Хотя иногда он может повторно использовать существующее распределение (особенно когда вы перераспределяете на меньший размер), так что hz == entries
, это не обязательно так, и вы никогда не должны предполагать это.
Насколько вам известно, память, на которую указывает entries
, была освобождена на realloc()
, а единственная действительная память на которую указывает hz
.
Причина сбоя при выполнении (char*) malloc(1)
, вероятно, заключается в том, что это выделяет память после предыдущего выделения. Без этого распределения realloc()
смог увеличить исходное распределение в это пространство. Аналогичным образом, вызов printf()
, вероятно, приводит к некоторому выделению внутренней памяти, что препятствует увеличению объема выделения. Другие незначительные изменения также влияют на макет памяти.