boost.test не показывает утечку памяти от pyString_from...()

Phoenix

 
 
BOOST_AUTO_TEST_CASE(Test1)
{
char *a = new char[100];

}

Показывает
 
Detected memory leaks!
Dumping objects ->
{628} normal block at 0x003FDF38, 100 bytes long.
 Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
  

 
 
BOOST_AUTO_TEST_CASE(Test2)
{
PyObject *a = PyString_FromStringAndSize("\xc0\x81", 2);

}

говорит, что всё хорошо. Почему так?

Maurog

1) подобные утечки репортует студия (хвала дебужному рантайму), то есть boost.test имеет крайне отдаленное отношение в этому репорту, скорее всего там просто включаются эти проверки через _CrtSetDbgFlag ( http://msdn.microsoft.com/en-us/library/974tc9t1%28v=vs.80%2... )
2) утечки могут не репортиться, потому что аллокация не проходит через главный дебужный рантайм нашего бинаря, а это может быть вследствие нескольких причин:
- используется динамическое свзяывание с длл (Python.dll?) и там свой рантайм (статический?)
- используются внутренние средства для выделения памяти (статические буферы, хитрые аллокаторы и тд)
boost test parameters: http://www.boost.org/doc/libs/1_49_0/libs/test/doc/html/utf/...
Parameter Name : Detect memory leaks
Environment variable name : BOOST_TEST_DETECT_MEMORY_LEAK
Command line argument name : build_info
Acceptable Values :
0
1
integer value > 1
Description :
positive value tells the framework to detect the memory leaks (if any). Any value greater then 1 in addition is treated as leak allocation number and setup runtime breakpoint. In other words setting this parameter to the positive value N greater than 1 causes the framework to set a breakpoint at Nth memory allocation (don't do that from the command line - only when you are under debugger). Note: if your test program produce memory leaks notifications, they are combined with allocation number values you could use to set a breakpoint. Currently only applies to MS family of compilers.

Phoenix

Ясненько. Спасибо!

Phoenix

А есть что-нибудь для отладки вообще?
Вот сейчас, segfault на строке "print (0)", видимо, где-то лишний Py_DECREF() на PyInt(0) сделан.
Оставить комментарий
Имя или ник:
Комментарий: