corba :: orb_init泄漏内存



我有一个项目,该项目使用陶(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分配资源吗?

泄漏之一:

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

您显示的泄漏是来自全局单例,该泄漏是在过程退出时清洁的,并且在运行时不会增加内存。问题很可能是在您的应用程序代码中,您很可能不会正确地使用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;
}

相关内容

  • 没有找到相关文章

最新更新