OMNeT++:'fast' 或 'express' 模式下的不同结果

OMNeT++: Different results in 'fast' or 'express' mode

使用的版本:OMNeT++ 5.0iNET 3.4.0

我创建了一些代码,在“逐步”或“动画”模拟模式下为我提供了可靠的结果。当我切换到“快速”或“快速”模式时,它就会出现问题。以下简化示例将解释我的问题:


    void MyMacSlave::handleSelfMessage(cMessage *msg)
{
    if (msg == CheckAck) {
         std::cout << “CheckAck: “ << msg << std::endl;
    }

    if (msg == transmissionAnnouncement) {
         std::cout << “transmissionAnncouncement: “ << msg << std::endl;
    }

    if (msg == transmissionEvent) {
         std::cout << “transmissionEvent: “ << msg << std::endl;
    }

    delete msg;
}

有一个函数,调用它来处理自己的消息。根据我收到的自我消息,我需要 运行 不同的 if 查询。

我在逐步或动画模式下得到了这个正确的输出:

CheckAck: (omnetpp::cMessage)CheckAck
transmissionAnncouncement: (omnetpp::cMessage)transmissionAnncouncement
transmissionEvent: (omnetpp::cMessage)transmissionEvent

这是我使用快速或快速模式得到的奇怪输出:

CheckAck: (omnetpp::cMessage)CheckAck
transmissionAnncouncement: (omnetpp::cMessage)transmissionAnncouncement
transmissionAnncouncement: (omnetpp::cMessage)transmissionEvent
transmissionEvent: (omnetpp::cMessage)transmissionEvent

第三行输出显示自己的消息是'transmissionEvent',但是'if (msg == transmissionAnnouncement)' 也被误认为是真的。


如上所示,根据我使用的模拟模式,我得到了不同的模拟结果。不同输出的原因是什么?为什么会有差异?

正如 Christoph 和 Rudi 所提到的,内存分配存在问题。当一个指针是 de-allocated 并且在同一内存上分配了一个新指针时,就会出现错误。关于使用不同 运行 模式的差异只是表示存在错误的迹象。

在我的例子中,检查 message-kinds 很有用,例如:

if (msg->getKind() == checkAckAckType) {

而不是原来问题中使用的方法。我使用简单的枚举定义了 message-kinds。