#c #memory #valgrind
Вопрос:
Я хочу найти висячие указатели в коде (который был создан в результате неглубокого копирования). Рассмотрим приведенный ниже пример..
int *a = new int(1);
int *b = a;
int *c = b;
delete a;
Теперь я хочу найти все такие указатели, как b и c, в коде. Как я могу это сделать?
Я пытался использовать valgrind, но он показывает ошибку только тогда, когда я на самом деле пытаюсь ее прочитать, но здесь я не читаю эти переменные.
Комментарии:
1. Для общей проблемы уже есть решение: интеллектуальные указатели. Никогда не используйте необработанные указатели на владение
2. Конечно, найти все такие указатели для данной программы-неразрешимая проблема. Лучшее, что вы можете сделать, это прислушаться к советам и исключить все
new
звонки.3. Нет, они не указывают на «случайное местоположение» после удаления
a
. Они имеют ту же ценность, которую вы придали им с самого начала. В указателях нет ничего изначально волшебного. Неясно, что, по вашему мнению, происходит или что, по вашему мнению, следует с этим делать.4. Обычно указатели, которые болтаются, но никогда больше не используются, не вызывают беспокойства, так зачем вам это нужно? Если проблема в том, что они все еще доступны из какого-либо общедоступного интерфейса, возможно, действительно поможет более полное тестирование этого интерфейса, которое может выявить проблемы после «очистки»?