OMNeT++:'fast' 或 'express' 模式下的不同结果
OMNeT++: Different results in 'fast' or 'express' mode
使用的版本:OMNeT++ 5.0 和 iNET 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。
使用的版本:OMNeT++ 5.0 和 iNET 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。