c++ - CORBA::ORB_init 泄漏内存

标签 c++ corba tao parasoft

我有一个项目使用 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 bytes 1 chunk allocated

malloc () (interface)

operator 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文件。

最佳答案

您显示的泄漏来自全局单例,它在进程退出时被清除并且在运行时不会增加内存。很可能问题出在您的应用程序代码中,您很可能没有正确使用 CORBA IDL 到 C++ 语言的映射。您的示例代码在这方面不正确,应该如下所示

int main (int argc, ACE_TCHAR * const argv[])
{
    std::cout << "start of main" << std::endl;

    CORBA::ORB_var myOrb = CORBA::ORB_init(argc, argv);
    myORB->destroy();

    std::cout << "end of main" << std::endl;
}

关于c++ - CORBA::ORB_init 泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56896755/

相关文章:

java - 使用 C++ 和 Java 的 CORBA 的 IPC

java - XML 数据传输的设计决策

c++ - 链接器错误 LNK1109

c++ - Corba IDL 结构内存泄漏

c++ - '_ = _ 其他._;'断点

c++ - 将两个矩阵与特征值进行比较

erlang - Orber (Erlang ORB) 在 TAO orb 抛出时无法捕获用户定义的异常

c++ - 获取非侵入式 boost 序列化 C++ 的私有(private)数据成员

c++ - 通过指针访问时的字节大小