c++ - CORBA::ORB_init 泄漏内存
问题描述
我有一个项目使用 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()(接口)
运算符新()
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;
}
推荐阅读
- python - InvalidS3ObjectException:无法从 S3 获取对象元数据?
- reactjs - React Context - 发布喜欢/不喜欢功能
- javascript - 如何获取在 discord.js v12 上创建帐户的日期?
- firefox - 为什么此 Firefox 扩展代码不适用于 contextMenus 的提示或警报?
- node.js - 在 discord.js 上制作 .env 文件和修改代码
- cassandra - 在 cassandra 中保存对象数组
- javascript - 必须使用地址门牌号进行正则表达式验证
- wordpress - 在 woocommerce_after_checkout_validation 中刷新结帐
- python - 在管理页面中查看教师模型下的用户模型,该模型与 Django 中的用户具有一对一的关系
- ios - 使用 AVAudioEngine 从内存中播放立体声音频缓冲区