Вопрос

Я пишу простой менеджер памяти на основе связанного списка в форме:

...Заголовок|Блок|Заголовок|Блокировать...со списком б/у и свободных.

Если функцию realloc() попросили уменьшить размер блока, можно ли перезаписать некоторые конечные байты заголовком вновь созданного блока?Документация, которую я прочитал, предполагает, что это «неопределенное поведение», но зависят ли приложения от того, что данные все еще существуют?

Это было полезно?

Решение

Скорее всего, замечание по поводу неопределенного поведения выглядело так:«Невозможно получить доступ к любым байтам после конца блока, когда возвращается функция realloc».

Такая спецификация предназначена именно для того, чтобы вы могли поместить заголовок в конечные байты. в реализации перераспределения.Это неопределенное поведение означает, что если приложение попытается прочитать байты (которые концептуально исчезли), оно прочитает ваш заголовок, который для приложения будет выглядеть как мусор;если он даже напишет, это уничтожит ваш заголовок, поэтому приложение не должно этого делать.

Другие советы

Конечно.Он был перераспределен, поэтому теперь он освобожден приложением и принадлежит вашему менеджеру.Это нормально - начать забивать его новыми указателями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top