omnet++ Simulation terminated with exit code: -1073741819 的一个解决方案

omnet++   Simulation terminated with exit code: -1073741819

Simulation terminated with exit code: -1073741819
Working directory: E:/omnet46dev/DTOMRD
Command line: DTOMRD.exe -r 0 omnetpp.ini


Environment variables:
PATH=;E:\omnetpp-4.6\bin;E:\omnetpp-4.6\tools\win32\usr\bin;E:\omnetpp-4.6\tools\win32\mingw32\bin;E:/omnetpp-4.6/ide/jre/bin/client;E:/omnetpp-4.6/ide/jre/bin;E:/omnetpp-4.6/ide/jre/lib/i386;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files (x86)\Java\jdk1.8.0_101\bin;D:\Program Files (x86)\Java\jdk1.8.0_101\jre\bin;E:\omnetpp-4.6\tools\win32\mingw32\bin;E:\omnetpp-4.6\bin;E:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\WinNT;E:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin;E:\Program Files (x86)\Microsoft Visual Studio\Common\Tools;E:\Program Files (x86)\Microsoft Visual Studio\VC98\bin;E:\omnetpp-4.6\ide;
OMNETPP_IMAGE_PATH=E:\omnetpp-4.6\images


一个原因,引用了错误地址的指针

包括下标越界了,定义的向量没有指定大小就是用了,使用了一个删除的指针(我这里犯的一个错误是,将message删除了,后面可能又用到了)。



网上还有其他的原因,什么DLL文件问题。但是不适用于我这里的情况。

参考这个  百度文库 OMNeT++错误代码解决


本来程序是能够正常运行的,后面加了几个向量(最开始是加的指针,怀疑是没delete好,或者越界了,觉得找原因好麻烦,就改成向量了),改成向量后,也出现了这个问题。


在调试的时候,发现自己设计的信道编号为几百万的值了,(原因是忘记从omnetpp.ini文件中读取信道编号)而在程序中的向量使用了这个信道编号作为下标,导致了越界访问了。



目前还没完全解决这个问题,先记录下来,因为程序本来是在循环第9次的时候出现了这个错误代码,现在是循环完了(200次),出现了这个错误代码。下一段代码还没怎么运行。  但是应该能至少说明程序出错是因为这样的原因。


2017.2.20晚上补充的:

还是下标越界的问题

原因是在上一段代码中定义了 int nowNum,在这一块代码中直接使用了nowNum,没有获得nowNum,就在向量下标中使用了,导致了这个错误代码。


但是不知道为什么,这一段代码调试的时候,无法插入断点,或者是插入断点没有用,每次都是卡死了,按任何调试快捷键都没有用。先记录在这里。最终自己是在程序里面加入cout输出语句来判断程序哪里出问题的。


还有一个问题,虽然直接run是没有问题了,但是在仿真结束后,在仿真界面重新run的时候,仿真也会终止,怀疑是向量没有清空之类的原因,造成使用内存过大。先记录下来。


2017.9.9补充的,关于使用了空指针报这个错的代码如下:,这个代码是只要收到消息,就将向其邻居发送消息:

 for(int i = 0 ; i < neighborSize1R ; i++ ){
                     Node* neighbor = this->neighbors1R[i];
                     if(usersRelayvv[num][neighbor->num] == -1)
                     {
                        //delete msg;   这里加了这一句就报错了,删了这个指针,后面可能用到了这个msg
                         continue;
                     }
                     else{
                          cGate* outGate = this->gate("out");
                          cGate* inGate = neighbor->gate("in",num + 1 ); //根据id获取门
                          if(outGate->isConnected())
                              outGate->disconnect();
                          outGate->connectTo(inGate);
                          cMessage* msgtemp= new cMessage("data");
                          msgtemp->setKind(Test_Msg);
                          send(msgtemp->dup(),"out");
                          cout<num<





你可能感兴趣的:(omnet,omnet++)