Динамически выделенная специфичная для потока память, не освобожденная перед концом потока
Это средство проверки деактивировано в Polyspace по умолчанию® как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию.
Этот дефект происходит, когда вы не освобождаете специфичную для потока динамически выделенную память перед концом потока.
Чтобы создать специфичное для потока устройство хранения данных, вы обычно выполняете эти шаги:
Вы создаете ключ для специфичного для потока устройства хранения данных.
Вы создаете потоки.
В каждом потоке вы выделяете устройство хранения данных динамически и затем сопоставляете ключ с этим устройством хранения данных.
После ассоциации можно считать хранимые данные позже с помощью ключа.
Перед концом потока вы освобождаете специфичную для потока память с помощью ключа.
Средство проверки отмечает пути к выполнению в потоке, где последний шаг отсутствует.
Средство проверки работает над этими семействами функций:
tss_get
и tss_set
(C11)
pthread_getspecific
и pthread_setspecific
(POSIX)
Данные, хранимые в памяти, доступны для других процессов даже после того, как потоки закончатся (утечка памяти). Помимо уязвимостей системы обеспечения безопасности, утечки памяти могут уменьшить сумму доступной памяти и уменьшать эффективность.
Свободная динамически выделенная память перед концом потока.
Можно явным образом освободить динамически выделенную память с функциями, такими как free
.
В качестве альтернативы, когда вы создаете ключ, можно сопоставить функцию деструктора с ключом. Функция деструктора вызвана со значением ключа в качестве аргумента в конце потока. В теле функции деструктора можно освободить любую память, сопоставленную с ключом. Если вы используете этот метод, Bug Finder все еще отмечает дефект. Проигнорируйте этот дефект с соответствующими комментариями. См.:
Обратитесь к Результатам Polyspace Через Исправления ошибок или Выравнивания, если вы рассматриваете результаты в пользовательском интерфейсе Polyspace.
Обратитесь к Результатам в Polyspace доступ Через Исправления ошибок или Выравнивания, если вы рассматриваете результаты в веб-браузере.
Аннотируйте Код и Скройте Известные или Приемлемые результаты, если вы рассматриваете результаты в IDE.
Группа: параллелизм |
Язык: C | C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
THREAD_MEM_LEAK |
Удар: Средняя |
ID CWE: 401, 404 |