Понимание выходов LeakSanitizer

Я использую AddressSanitizer из g ++ в своей программе, и есть некоторые выводы, которые я испытываю с трудностями при понимании и действии.

Раньше я использовал g ++ — 4.8.4, и я почти уверен, что отчетов об утечках не было, но недавно я перешел на g ++ — 5.2.1, и теперь у меня есть новые отчеты об ошибках. Я думаю, GCC5 стало лучше.

Однако некоторые из них довольно загадочны, например:

== 8192 == ОШИБКА: LeakSanitizer: обнаружены утечки памяти

Прямая утечка 6960 байтов в 174 объектах, выделенных из:
# 0 0x7f4a73eac5b1 в __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x945b1)
# 1 0x7f4a3ccd1d81 (/usr/lib/x86_64-linux-gnu/dri/i965_dri.so+0x27ad81)

Прямая утечка 2560 байтов в 4 объектах, выделенных из:
# 0 0x7f4a73eac76a в realloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9476a)
# 1 0x7f4a53c34839 (/usr/lib/x86_64-linux-gnu/libfontconfig.so.1+0x1b839)

Прямая утечка 2144 байта (ов) в 57 объектах, выделенных из:
# 0 0x7f4a73eac44a в malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9444a)
# 1 0x7f4a5f242b7c (/usr/lib/x86_64-linux-gnu/libxcb.so.1+0xbb7c)

Следующий более понятен:

Прямая утечка 512 байтов в 1 объекте, выделенном из:
# 0 0x7f4a73ead1ba в операторе new (без знака long) (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x951ba)
… больше строк, указывающих на проблему в файле и стек вызовов.

Первые три отчета связаны с последним? Если они независимы, есть ли способ найти то, что не так?

Благодарю.

0

Решение

==8192==: PID

Direct leak of 6960 byte(s) : общая утечка памяти для этого отчета

in 174 object(s) : количество отдельных распределений, которые совместно используют одну и ту же трассировку стека (или часть трассировки стека) (может быть выделением в цикле)

from: #0 [...] : трассировка стека.

Это для глупого объяснения того, что здесь.

То, что вы можете знать, это: все, что вы просочились, кажется, в i965_dri.soграфический драйвер Intel для пользователей Linux и другие общие объекты X.org. В этом случае утечка может происходить из вашего кода, если вы не освобождаете некоторые ресурсы openGL / GLX, или LeakSanitizer считает это утечкой, а вместо этого управляет драйвером intel (возможно, как кеш или пул распределения).

Первое, что я хотел бы найти, — это ресурсы openGL, которые все еще активны в конце программы и освобождают их. Если вы используете рендер или библиотеки, такие как Qt / …, он может сохранять некоторые ресурсы выделенными.

Вы правильно закрываете выделенное окно, освобождаете курсор, …?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]