Задать вопрос
@Aren_SH

free и const

Столкнулся со следующей ситуацией. Есть указатель (void *) который впоследствии освобождается через free()

struct {
	void *value;
	....
};
...
// Присваивается указатель на какое-нибудь значение
node->value = value;
...
free(node->value);


Проблема возникает если node->value присвоить указатель на const переменную (или строковую константу), которую free() не может очистить.

Можно ли проверить, что free() передается корректный указатель и предотвратить проблему? Или это остается на совести погромиста?
  • Вопрос задан
  • 3236 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Monnoroch
@Monnoroch
void free(void * ptr);

а не
void free(const void * ptr);

Статическая типизация проверила за вас.
Запретить возможность ручного каста возможным не представляется.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
IlyaEvseev
@IlyaEvseev
Opensource geek
если node->value присвоить указатель на const переменную

Нормальный компилятор должен ругнуться на таком присвоении.
Ответ написан
Комментировать
ixSci
@ixSci
Нет.
Ответ написан
Комментировать
@Aren_SH Автор вопроса
Понятно. Спасибо всем за ответы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы