벡터에 파일을 쓰고 파일을 읽고 벡터를 다시 읽고 벡터에서 임의의 요소를 선택해야하는 ns3 응용 프로그램을 작성했습니다. 이 코드는 다음과 같습니다.문자열 할당 오류
#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/mf-helper.h"
#include "ns3/ipv4-static-routing-helper.h"
#include "ns3/ipv4-list-routing-helper.h"
#include "ns3/data-rate.h"
#include "ns3/mobility-module.h"
#include "ns3/wifi-module.h"
#include "ns3/ideal-wifi-manager.h"
#include "ns3/wifi-remote-station-manager.h"
#include "ns3/wifi-mode.h"
using namespace ns3;
using namespace std;
void writeFile(string, vector<string>);
void readFile(string, vector<string> &);
unsigned int Random(int,int);
bool Find(vector<string> , string);
void selectNodes(vector<string>);
vector<string> senders;
int main(int argc, char **argv)
{
vector<string> vect;
vect.push_back("10.1.1.1");
vect.push_back("10.1.1.2");
vect.push_back("10.1.1.3");
vect.push_back("10.1.1.4");
vect.push_back("10.1.1.5");
vect.push_back("10.1.1.6");
vect.push_back("10.1.1.7");
writeFile("data.txt", vect);
vector<string> ret;
readFile("data.txt",ret);
selectNodes(ret);
}
void writeFile(string name, vector<string> vs)
{
ofstream outfile(name.c_str(), ios::out);
ostream_iterator<string> oi(outfile, "\n");
copy(vs.begin(), vs.end(), oi);
}
void readFile(string name, vector<string> &vect)
{
ifstream file(name.c_str());
copy(istream_iterator<string> (file), istream_iterator<string>(), back_inserter(vect));
}
void selectNodes(vector<string> ret)
{
srand(time(NULL));
string src;
string dest;
unsigned int s= ret.size();
src = ret[Random(1,s)];
dest = ret[Random(1,s)];
while(Find(senders, src))
{
src = ret[Random(1,s)];
}
while (src == dest)
{
src = ret[Random(1,s)];
if (dest != src)
break;
}
cout << "##Source: " << src << std::endl;
cout << "##Destination: " << dest << std::endl;
senders.push_back(src);
}
unsigned int Random(int nLow, int nHigh)
{
return (rand() % (nHigh - nLow + 1)) + nLow;
}
bool Find(vector<string> senders, string addr)
{
for(unsigned int i=0;i<senders.size();i++)
if(senders[i] == addr)
return 1;
return 0;
}
이 코드는 무작위로 충돌합니다. gdb가 말하는 것입니다
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0xfffffffffffffff8
0x00007fff8ad5a220 in std::string::_Rep::_M_grab()
(gdb) bt
#0 0x00007fff8ad5a220 in std::string::_Rep::_M_grab()
#1 0x00007fff8ad5a29b in std::string::assign()
#2 0x0000000100002a31 in selectNodes ([email protected]) at test_write.cc:74
#3 0x0000000100003cf5 in main (argc=1, argv=0x7fff5fbff998) at test_write.cc:49
왜 문자열 할당이 실패합니까? 나는 어떤 사람들은 메모리 누출로 인해 이런 멍청이가 있음을 발견했다. 그러나 여기서는 그렇지 않습니다. 내가 놓친 게 있니?
edsger 링크의 경우 –
그건 내 바보 같았 어! 이것과 링크를 지적 해 주셔서 감사합니다. –