Как я могу найти все висячие указатели в коде?

#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. Обычно указатели, которые болтаются, но никогда больше не используются, не вызывают беспокойства, так зачем вам это нужно? Если проблема в том, что они все еще доступны из какого-либо общедоступного интерфейса, возможно, действительно поможет более полное тестирование этого интерфейса, которое может выявить проблемы после «очистки»?