@Aren_SH

free и const

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

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


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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
КЛЮЧАВТО Краснодар
от 35 000 до 40 000 ₽
Robusta Москва
от 340 000 до 430 000 ₽
Frank RG Москва
от 100 000 до 250 000 ₽
01 окт. 2023, в 15:48
1000 руб./за проект
01 окт. 2023, в 15:33
13000 руб./за проект
01 окт. 2023, в 15:24
17000 руб./за проект