Oh wait, C++ doesn't clean up automatically. The new needs to have a corresponding delete!!
Bill. 2009/1/10 Bill Hart <goodwillh...@googlemail.com>: > Sorry, that should say: > > "whose constructor is: > > explicit numpunct( > size_t _Refs = 0 > );" > > Bill. > > 2009/1/10 Bill Hart <goodwillh...@googlemail.com>: >> >> I've been taking a look at the memory leak in t-locale. According to >> the valgrind log there is a leak due to operator new(unsigned long) in >> set_point when called from check_output(). >> >> Here is the relevant code: >> >> char point_string[2]; >> >> #if HAVE_STD__LOCALE >> // Like std::numpunct, but with decimal_point coming from point_string >> []. >> class my_numpunct : public numpunct<char> { >> public: >> explicit my_numpunct (size_t r = 0) : numpunct<char>(r) { } >> protected: >> char do_decimal_point() const { return point_string[0]; } >> }; >> #endif >> >> void >> set_point (char c) >> { >> point_string[0] = c; >> >> #if HAVE_STD__LOCALE >> locale loc (locale::classic(), new my_numpunct ()); >> locale::global (loc); >> #endif >> } >> >> void >> check_output (void) >> { >> static char point[] = { >> '.', ',', 'x', '\xFF' >> }; >> >> for (size_t i = 0; i < numberof (point); i++) >> { >> set_point (point[i]); >> ostringstream got; >> >> // <snip> >> } >> } >> >> It seems to me that the "new my_numpunct ()" is the culprit. The >> constructor just calls the constructor for the standard numpunct >> class, whose destructor is: >> >> explicit numpunct( >> size_t _Refs = 0 >> ); >> >> As size_t is probably an int of 4 bytes, it looks like that never gets >> cleaned up. Apparently the destructor for that class is protected. >> >> My knowledge of C++ doesn't enable me to see a solution to this. Does >> anyone else know how to force cleanup of excrement like this? >> >> Bill. >> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "mpir-devel" group. To post to this group, send email to mpir-devel@googlegroups.com To unsubscribe from this group, send email to mpir-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/mpir-devel?hl=en -~----------~----~----~----~------~----~------~--~---