- Висячие указатели (dangling pointers): Указывают на освобожденную память. При попытке разыменования приводят к неопределенному поведению (crash, corrupted data).
- Утечки памяти (memory leaks): Память выделена, но перестает быть доступной (указатель потерян), и не может быть освобождена. Накапливаются, приводят к исчерпанию ресурсов.
- Неправильная инициализация: Указатель не инициализирован или инициализирован некорректным адресом, что приводит к неопределенному поведению при разыменовании.
- Разыменование нулевого указателя: Попытка получить доступ к памяти по адресу
nullptr. Приводит к сегментационной ошибке/исключению.
- Ошибки арифметики указателей: Выход за границы выделенной памяти при использовании инкремента/декремента или смещения.
- Неправильное приведение типов указателей: Приведение указателя одного типа к другому, если типы несовместимы или структура данных не соответствует ожидаемой.
- Двойное освобождение памяти (double free): Попытка освободить один и тот же блок памяти более одного раза. Приводит к неопределенному поведению, может повредить внутренние структуры менеджера памяти.
- Отсутствие владения (ownerhip) памятью: Неясно, какая часть кода отвечает за освобождение выделенной памяти.
- Небезопасные функции работы со строками: Функции вроде
strcpy, strcat не проверяют границы буфера, что может привести к переполнению буфера и уязвимостям.
Для mitigate этих проблем в C++ используются смарт-указатели (unique_ptr, shared_ptr, weak_ptr), RAII, контейнеры стандартной библиотеки (векторы, списки).
c