3

コードのメモリ リークをチェックしています。コードを取得するまで、すべて問題ありません。

mSystem = new LightSystem();
sf::View *view = th::DisplayManager::Get()->GetCamera();
mSystem->SetView(*view);

SetView本当に小さな仕事をします(渡されたポインターのいくつかのメンバーを抽出しviewます。最新のコード行がコメントされている場合はすべて問題ありませんが、すべてのコメントを外すとデフォルトモードで機能し、valgrind(valgrind --tool=memcheck ./Binary)でメモリリーク検出に失敗します.

==23703== Use of uninitialised value of size 8
==23703==    at 0x6B8472: ltbl::LightSystem::SetView(sf::View const&) (LightSystem.cpp:55)
==23703==    by 0x6A7A7D: th::LightManager::Initialize() (LightManager.cpp:46)
==23703==    by 0x6A75EA: th::Root::Initialize() (Root.cpp:101)
==23703==    by 0x6A7113: th::Root::Root() (Root.cpp:66)
==23703==    by 0x6A7553: th::Root::Get() (Root.cpp:88)
==23703==    by 0x6291A8: th::Game::Initialize() (Game.cpp:36)
==23703==    by 0x61DC1C: main (main.cpp:82)
==23703== 
==23703== Invalid read of size 8
==23703==    at 0x6B8472: ltbl::LightSystem::SetView(sf::View const&) (LightSystem.cpp:55)
==23703==    by 0x6A7A7D: th::LightManager::Initialize() (LightManager.cpp:46)
==23703==    by 0x6A75EA: th::Root::Initialize() (Root.cpp:101)
==23703==    by 0x6A7113: th::Root::Root() (Root.cpp:66)
==23703==    by 0x6A7553: th::Root::Get() (Root.cpp:88)
==23703==    by 0x6291A8: th::Game::Initialize() (Game.cpp:36)
==23703==    by 0x61DC1C: main (main.cpp:82)
==23703==  Address 0x8 is not stack'd, malloc'd or (recently) free'd
==23703== 
==23703== 
==23703== Process terminating with default action of signal 11 (SIGSEGV)
==23703==  Access not within mapped region at address 0x8
==23703==    at 0x6B8472: ltbl::LightSystem::SetView(sf::View const&) (LightSystem.cpp:55)
==23703==    by 0x6A7A7D: th::LightManager::Initialize() (LightManager.cpp:46)
==23703==    by 0x6A75EA: th::Root::Initialize() (Root.cpp:101)
==23703==    by 0x6A7113: th::Root::Root() (Root.cpp:66)
==23703==    by 0x6A7553: th::Root::Get() (Root.cpp:88)
==23703==    by 0x6291A8: th::Game::Initialize() (Game.cpp:36)
==23703==    by 0x61DC1C: main (main.cpp:82)
==23703==  If you believe this happened as a result of a stack
==23703==  overflow in your program's main thread (unlikely but
==23703==  possible), you can try to increase the size of the
==23703==  main thread stack using the --main-stacksize= flag.
==23703==  The main thread stack size used in this run was 8388608.

問題は、なぜ valgrind なしで正常に動作し、それで壊れるのかということです。また、大きな値を設定しようとしまし--main-stacksize=たが、役に立ちませんでした。

4

1 に答える 1

4
==23703== Process terminating with default action of signal 11 (SIGSEGV)
==23703==  Access not within mapped region at address 0x8

ある時点 (おそらく)で、有効なアドレスのように見えない、LightSystem.cpp:55割り当てたポインターを逆参照しています。8

于 2012-04-04T12:17:29.453 に答える