#include // Only use angled for Platform, else, xcode project won't compile #include "../cpp_lib/MemoryTracker.h" #include "../cpp_foundation/XStringArray.h" static int breakpoint(int v) { return v; } // //class TestAlloc { //public: //// MemoryAllocation4Object objma; // void* ptr1 = 0; // void* ptr2 = 0; // // TestAlloc() {}; // ~TestAlloc() { //// objma.free(ptr1, "ptr1"_XS8); // MT_delete(ptr1, ""_XS8); // }; // // void* testAlloc2() // { // printf("--TestAlloc.testAlloc2 - begin\n"); //// MemoryAllocation ma(__FILE_NAME__, __PRETTY_FUNCTION__, __LINE__); // ptr1 = MT_alloc(10, "ptr1 (supposed to be a memory leak)"_XS8); (void)ptr1; //// objma.takeOwnership(ptr1, "ptr1"_XS8); // void* ptrl1 = MT_alloc(10, "ptrl1"_XS8); (void)ptrl1; // MT_delete(ptrl1, "ptrl1"_XS8); // void* ptrl2 = MT_alloc(10, "ptrl2 bis"_XS8); // printf("--TestAlloc.testAlloc2 - end\n"); //// MT_export(q2); //// return ma.return_(ptrl2); // return ptrl2; // } //}; // //void* testAlloc2() //{ // printf("--testAlloc2 - begin\n"); // // MemoryAllocation ma(__FILE__, __PRETTY_FUNCTION__, __LINE__); // void* p2 = MT_alloc(10, "p2 (supposed to be a memory leak)"_XS8); (void)p2; // void* q2 = MT_alloc(10, "q2"_XS8); (void)q2; // MT_delete(q2, "q2"_XS8); // q2 = MT_alloc(10, "q2 bis"_XS8); // // // printf("--testAlloc2 - end\n"); // return ma.return_(q2); //} // //void testAlloc1() //{ // printf("--testAlloc1 - begin\n"); // MemoryAllocation ma(__FILE__, __PRETTY_FUNCTION__, __LINE__); // void* p = MT_alloc(10, "p (supposed to be a memory leak)"_XS8); (void)p; // void* q = MT_alloc(10, "q"_XS8); (void)q; // void* t = testAlloc2(); (void)t; // MT_delete(q, "q"_XS8); // q = MT_alloc(10, "q bis (supposed to be a memory leak)"_XS8); // printf("--testAlloc1 - end\n"); //} // // //TestAlloc g_ta; // void f_p1void(void* p) { void* q = p; (void)q; } int MemoryTracker_tests() { #ifdef MEMORY_TRACKER_ENABLED // Work in progress !!!!!!!!!!!!!! void* p; (void)p; // int t1_v = 3; //// apd apdTest1 = &t1_v; // this would crash because this ptr cannot be freed // apd apdTest1 = new int(t1_v); // this is ok // int* q = &(*apdTest1); //// int* qq = *apdTest1; // int* const* r = &apdTest1; // **r = 7; // // void* u = apdTest1; // auto uuu = &apdTest1.get(); // // f_p1void(apdTest1); // // auto apdTest1_get = apdTest1.get(); // auto apdTest1_adr_of_get = &apdTest1.get(); // auto apdTest1_getAdrOfPtr = &apdTest1; MemoryTrackerInstallHook(); { new char(); char* pp = (char*)malloc(2); *(pp-1) = 0; free(pp); } { new char(); char* pp = (char*)malloc(2); *(pp+3) = 0; free(pp); } MT_outputDanglingPtr(); if ( MT_getDanglingPtrCount() != 2 ) return breakpoint(1); // testAlloc1(); // printf("------------------\n"); // { // TestAlloc ta; // p = ta.testAlloc2(); // MT_delete(p, "return ta.testAlloc2()"_XS8); // } // printf("------------------\n"); // p = g_ta.testAlloc2(); // MT_delete(p, "return g_ta.testAlloc2()"_XS8); // MT_outputDanglingPtr(); // printf("------------------\n"); #else breakpoint(0); // to avoid warning. #endif return 0; }