Hmm, when I valgrind t-locale on sage.math, no leaks show up. What am
I doing wrong?

Bill.

2009/1/10 Bill Hart <goodwillh...@googlemail.com>:
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to