在使用 OPNET Modeler 软件时,会遇到很多奇奇怪怪的报错,今天要介绍的报错内容如下。
Packet pointer references unowned packet(<pk_id>).
程序中断的原因截图如下图所示。
由上图可以看到,引发错误的 OPNET 核心函数是 op_pk_send(),也就是发送包的函数。
打开 OPNET Modeler 软件的产品文档,打开方式是点击任何编辑窗口 Help——>Product Decumentation,打不开可以参见文章:修改OPNET帮助文档的默认打开浏览器 & 给Edge浏览器配置IE Tab插件。
打开产品文档后,在Programmers Reference——>Discrete Event Simulation——>Packet Package下找到 op_pk_send() 函数,其描述如下图所示。
op_pk_send() 函数通过输出数据包流转发指定的数据包,在当前模拟时间内安排数据包到达目的模块,并通过调用进程释放数据包的所有权。该函数携带两个参数,第一个参数是一个 Packet* 类型的指针,第二个参数是输出包流,它是整形的。
该函数的下方还列出了使用该核心函数可能遇到的错误,如下图所示。
其中有一项就是关于本文要介绍的 Packet pointer references unowned packet(<pk_id>).。
那么该错误到底怎么解决呢,先来看看我是因为什么报错的,报错的代码部分如下。
for(i=0;i<10;i++)
{
op_pk_send(ptr,i);
}
我写这段代码是想在好几条包流上都发送一个包,但是呢,每个包都有一个独属于自己的 ID,尽管可以有多个包指针同时指向这个包,但是该包一经发送,便不可再次发送。对于不再拥有的包,不可以执行 send 和 destroy 操作,但是仍然可以执行 access 和 remove 操作。
所以该报错的解决办法就是:要么把该包发送一次,要么在每次发送之前都新创建一个包,然后发送该包。
下面的代码就是在每次发送之前创建一个格式包,然后发送该包,这样就不会报错了。
for(i=0;i<10;i++)
{
ptr = op_pk_create_fmt("aaa");
op_pk_send(ptr,i);
}
以上就是关于OPNET出现“Packet pointer references unowned packet(<pk_id>)”错误的解决办法,希望本文能够帮到你!