From d5f5d382eb0b43c273ff4d027d74d53abb4e28da Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Fri, 11 Aug 2017 12:24:33 -0700 Subject: [PATCH] Added VS crtdbg memory leak tracking --- include/flatbuffers/base.h | 27 ++++++++++++++++++++------- tests/test.cpp | 27 ++++++++++++++++++--------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/include/flatbuffers/base.h b/include/flatbuffers/base.h index 497a2a964..b4f365dd0 100644 --- a/include/flatbuffers/base.h +++ b/include/flatbuffers/base.h @@ -1,20 +1,33 @@ #ifndef FLATBUFFERS_BASE_H_ #define FLATBUFFERS_BASE_H_ +#if defined(_MSC_VER) && defined(_DEBUG) + #define _CRTDBG_MAP_ALLOC +#endif + #include #ifndef ARDUINO #include #endif + #include #include #include -#include -#if defined(ARDUINO) && !defined(ARDUINOSTL_M_H) -#include -#else -#include + +#if defined(_MSC_VER) && defined(_DEBUG) + #include + #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) + #define new DEBUG_NEW #endif + +#if defined(ARDUINO) && !defined(ARDUINOSTL_M_H) + #include +#else + #include +#endif + +#include #include #include #include @@ -122,8 +135,8 @@ #endif #if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable: 4127) // C4127: conditional expression is constant + #pragma warning(push) + #pragma warning(disable: 4127) // C4127: conditional expression is constant #endif /// @endcond diff --git a/tests/test.cpp b/tests/test.cpp index 4b9923904..d60ba1cc1 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -1541,6 +1541,8 @@ void UnionVectorTest() { fbb.Clear(); fbb.Finish(Movie::Pack(fbb, movie_object)); + delete movie_object; + auto repacked_movie = GetMovie(fbb.GetBufferPointer()); TestMovie(repacked_movie); @@ -1737,15 +1739,22 @@ void TypeAliasesTest() } int main(int /*argc*/, const char * /*argv*/[]) { + #if defined(_MSC_VER) && defined(_DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF + // For more thorough checking: + //| _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_DELAY_FREE_MEM_DF + ); + #endif + // Run our various test suites: std::string rawbuf; auto flatbuf1 = CreateFlatBufferTest(rawbuf); -#if !defined(FLATBUFFERS_CPP98_STL) - auto flatbuf = std::move(flatbuf1); // Test move assignment. -#else - auto &flatbuf = flatbuf1; -#endif // !defined(FLATBUFFERS_CPP98_STL) + #if !defined(FLATBUFFERS_CPP98_STL) + auto flatbuf = std::move(flatbuf1); // Test move assignment. + #else + auto &flatbuf = flatbuf1; + #endif // !defined(FLATBUFFERS_CPP98_STL) AccessFlatBufferTest(reinterpret_cast(rawbuf.c_str()), rawbuf.length()); AccessFlatBufferTest(flatbuf.data(), flatbuf.size()); @@ -1761,10 +1770,10 @@ int main(int /*argc*/, const char * /*argv*/[]) { test_data_path = FLATBUFFERS_STRING(FLATBUFFERS_TEST_PATH_PREFIX) + test_data_path; #endif - ParseAndGenerateTextTest(); - ReflectionTest(flatbuf.data(), flatbuf.size()); - ParseProtoTest(); - UnionVectorTest(); + ParseAndGenerateTextTest(); + ReflectionTest(flatbuf.data(), flatbuf.size()); + ParseProtoTest(); + UnionVectorTest(); #endif FuzzTest1();