LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

При разыменовании указателя на освобождённую память можно гарантированно падать.

Как? Вот у тебя есть кусок кода

void f(int *p)
{
  *p = 1;
}

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

Гарантированно падать можно только если отдельно хранить список (хеш) выделенных областей памяти и при каждом разыменовании проверять, что адрес относится к допустимым.

Исходная версия monk, :

При разыменовании указателя на освобождённую память можно гарантированно падать.

Как? Вот у тебя есть кусок кода

void f(int *p)
{
  *p = 1;
}

Сейчас компилятор просто читает значение по предоставленному адресу.
Но если этот адрес уже освобождён и использован под что-то ещё, будет портится память этого чего-то ещё (вплоть до адреса возврата из функции, если был адрес на стеке).

Гарантированно падать можно только если отдельно хранить список (хеш) выделенных областей памяти и при каждом разыменовании проверять, что адрес относится к допустимым.