Главная » IT НОВОСТИ » Представлен набор способов обнаружения висячих указателей в C++

Представлен набор способов обнаружения висячих указателей в C++

Эксперт по C++ Герб Саттер (Herb Sutter) опубликовал статью о том, как можно выявлять наиболее частые случаи возникновения висячих указателей в программах, написанных на C++. По его словам, она преследует лишь информационные цели, однако предложения могут войти в стандарт языка, если ими заинтересуется комиссия по стандартизации.

Почему это важно?

Висячие указатели появляются при перемещении или удалении объектов, если при этом значение указателя не изменено на нулевое. Даже если система перераспределит освобожденную память под другие данные, указатель все равно будет ссылаться на прежние ячейки. Это может привести к непредсказуемому поведению программы.

Читайте также:  DxOMark: камера Mate 20 Pro превзошла iPhone XS Max, Pixel 3 и OnePlus 6T (2 фото)

И что за предложения?

Описанный подход предлагает оперировать переменными двух типов: Owner (контейнеры или умные указатели), и Pointer (итераторы, string_view, span). Затем разработчики могут использовать локальный ACFG-анализ (acyclic control flow graph, ациклический граф потока управления), чтобы отслеживать, на что указывает каждый Pointer, и выявлять случаи, когда изменение Owner делает Pointer недействительным.

В анонсе к статье Саттер отметил, что эти предложения можно посчитать рисковой попыткой решить сорокалетнюю проблему. И если бы наиболее крупные поставщики расширений под C++ реализовали всплывающие при компиляции предупреждения о висячих указателях, стандартизация и вовсе была бы не нужна.

Источник