У меня есть проект, который использует Службу именования TAO (CORBA) для обмена информацией между различными модулями. Тем не менее, я обнаружил, что моя реализация службы именования вызвала утечку памяти, обнаруженную моим программным обеспечением для обнаружения утечки памяти (Parasoft).
В целях тестирования я создал небольшой пример проекта.
int main (int argc, ACE_TCHAR ** const argv)
{
std::cout << "start of main" << std::endl;
CORBA::ORB_ptr myOrb = CORBA::ORB_init(argc, argv);
CORBA::release(myOrb);
myORB->destroy();
std::cout << "end of main" << std::endl;
}
Когда я запустил свое программное обеспечение для обнаружения утечек памяти, было обнаружено, что ORB_init утечка памяти. Однако, как видно из примера кода, все, что я сделал, это инициировал ORB, а затем сразу же выпустил и уничтожил его. Есть ли какие-либо другие шаги для освобождения выделенных ORB ресурсов изнутри?
Одна из утечек:
12 байтов 1 выделенный блок
malloc () (интерфейс)
оператор new ()
CORBA :: string_alloc () String_Alloc.cpp, 53
CORBA :: string_dup () String_Alloc.cpp, 38
TAO_Default_Resource_Factory :: get parser_names () default_resources.cpp, 590
TAO_Parser_Registry :: open () Parser_Registry.cpp, 40
TAO_ORB_Core :: init () /home/user/ACE_Wrappers/ace/Arg_Shifter.cpp, 1291
CORBA :: ORB_init () ORB.cpp 1359
main () ..src / AlphaTest.cpp, 34
У меня есть только контроль над src / AlphaTest.cpp, остальные файлы TAO.