LeakSanitizer에 따라 스택에 텍스처를 생성하면 메모리 누수가 발생합니다. 오 탐지입니까?
macOS Mojave에서 sfml 버전 2.5.1을 사용하고 있습니다.
main.cpp
#include <SFML/Graphics.hpp>
int main(int, char const**) {
sf::Texture texture;
}
편집
clang++ -Wall -Weffc++ -Werror -pedantic -g -fsanitize=address -fno-omit-frame-pointer -lstdc++ -lsfml-graphics main.cpp
운영
➜ test_sfml_texture ASAN_OPTIONS=detect_leaks=1 ./a.out
=================================================================
==48054==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 120 byte(s) in 1 object(s) allocated from:
#0 0x1005b1287 in wrap_calloc (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x61287)
#1 0x7fff7690e4eb in class_createInstance (libobjc.A.dylib:x86_64h+0x64eb)
#2 0x7fff7809cef3 in _os_object_alloc_realized (libdispatch.dylib:x86_64+0x2ef3)
#3 0x7fff780adb37 in dispatch_source_create (libdispatch.dylib:x86_64+0x13b37)
#4 0x7fff780b81eb in _dispatch_kq_poll (libdispatch.dylib:x86_64+0x1e1eb)
#5 0x7fff780b7d3a in _dispatch_kq_drain (libdispatch.dylib:x86_64+0x1dd3a)
#6 0x7fff780b72b1 in _dispatch_kq_unote_update (libdispatch.dylib:x86_64+0x1d2b1)
#7 0x7fff780ae720 in _dispatch_source_install (libdispatch.dylib:x86_64+0x14720)
#8 0x7fff780ae67c in _dispatch_source_activate (libdispatch.dylib:x86_64+0x1467c)
#9 0x7fff780a2b9a in _dispatch_lane_resume_activate (libdispatch.dylib:x86_64+0x8b9a)
#10 0x7fff713176b8 in (anonymous namespace)::RunElsewhere::instance() (SkyLight:x86_64+0x1d6b8)
#11 0x7fff71456f59 in __SLSInitialize_block_invoke (SkyLight:x86_64+0x15cf59)
#12 0x7fff7809d63c in _dispatch_client_callout (libdispatch.dylib:x86_64+0x363c)
#13 0x7fff7809ed4b in _dispatch_once_callout (libdispatch.dylib:x86_64+0x4d4b)
#14 0x7fff7130802e in CGS_CHECK_INIT (SkyLight:x86_64+0xe02e)
#15 0x7fff714ca6a0 in SLSMainDisplayID (SkyLight:x86_64+0x1d06a0)
#16 0x101288126 in sf::priv::VideoModeImpl::getDesktopMode() (libsfml-window.2.5.dylib:x86_64+0x1a126)
#17 0x101282409 in sf::priv::SFContext::SFContext(sf::priv::SFContext*) (libsfml-window.2.5.dylib:x86_64+0x14409)
#18 0x101273932 in sf::priv::GlContext::initResource() (libsfml-window.2.5.dylib:x86_64+0x5932)
#19 0x10050e482 in sf::Texture::Texture() (libsfml-graphics.2.5.dylib:x86_64+0x3e482)
#20 0x1004cce70 in main main.cpp:4
#21 0x7fff780ea3d4 in start (libdyld.dylib:x86_64+0x163d4)
체계
➜ test_sfml_texture which clang
/usr/local/opt/llvm@8/bin/clang
➜ test_sfml_texture clang++ --version
clang version 8.0.1 (tags/RELEASE_801/final)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm@8/bin
이것은 공식 포럼 에 더 잘보고 될 것입니다. 대부분의 관리자는 그것이 실제 누출인지 거짓 양성인지 당신에게 말할 수 있기 때문입니다.
소스를 살펴보면 어떤 것이 유출되는지 실제로 볼 수 없으며 macOS 자체가 무언가를 유출하는 것처럼 보입니다. 내가 모호하게 생각할 수있는 유일한 것은 반환 된 값이 CGMainDisplayID
다시 릴리스되어야한다는 것입니다.
참고 : 새로운 C ++ 표준, 특히 스마트 포인터를 사용하고 수동 메모리 관리를 피하는 경우 더 이상 발생하지 않는 경향이 있으므로 정기적으로 메모리 누수를 추적 할 필요가 거의 없습니다 (예 : 스마트 포인터가 소진되면 메모리가 자동으로 해제 됨). 범위).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다