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