POSIX mq_timedsend msg_ptr发生了什么



我正在尝试调试潜在的内存泄漏。我可以看到在调用mq_timedsend后没有手动释放msg_ptr

我的问题是,mq_timedsend将消息发送到队列后是否会释放消息?

不,它不会释放消息,也不应该 - 出于多种原因!

  • 引用的对象可能未在第一个实例中动态分配。

  • 它不能安全地假定调用方不再使用 msg_ptr 指向的对象。

  • 无法知道它不是指向需要调用析构函数的C++对象的指针,而不是简单地释放内存块。

简而言之,任何库函数以您建议的方式运行都是不合适和危险的。 作为一般原则,动态分配的内存应由其所有者删除,除非有一些明确且记录在案的协议来放弃所有权 - 这不是一种常见的模式。

在这种情况下,数据将复制到消息队列中,因此您可以在发送后自由修改或释放任何msg_ptr引用。

相关内容

  • 没有找到相关文章

最新更新