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文件问题。但是不适用于我这里的情况。
本来程序是能够正常运行的,后面加了几个向量(最开始是加的指针,怀疑是没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<<"成功给邻居发送消息,邻居编号 "<<neighbor->num<<endl;
}
delete msg;
}