POSIX mq_timedsend msg_ptr会发生什么?

时间:2014-01-02 19:59:49

标签: queue posix rtos

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

我的问题是mq_timedsend将邮件发送到队列后是否将邮件释放?

1 个答案:

答案 0 :(得分:1)

不,由于各种原因,它不会释放消息,也不会释放消息!

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

  • 无法安全地假设调用者不再使用msg_ptr指向的对象。

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

简而言之,任何图书馆功能都以你建议的方式行事是不恰当和危险的。作为一般原则,动态分配的内存应该由其所有者删除,除非有一些明确的文档化协议用于放弃所有权 - 这不是一种常见的模式。

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