我有一个项目,该项目使用陶(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;
}