"John Harrison" <jo*************@hotmail.com> wrote in message news:<bd************@ID-196037.news.dfncis.de>...
Please post real code instead of english descriptions.
Here is how myElement is defined:
struct myElement {
int x1;
int x2;
public:
bool operator<(const myElement & myElt) const {
return (x2 <= myElt.x2);
}
};
You certainly have a problem here. With this defintion of operator< it is
possible that both a < b and b < a could be true (if a.x2 == b.x2). That
could certainly be enough to crash the insert operation.
john
Here is my actual code. I hope everything relevant is here. Otherwise
do not hesitate to ask me for more details.
vector< set<sequencedTime> >
sequencedTimes(runwayNum,set<sequencedTime>());
int * times = new int[indivSize];
for(int i=0; i<indivSize; i++) {
int earliest = (_ptrFleet->GetAircraftWithIndex(i))->GetEarliestTime();
int latest = (_ptrFleet->GetAircraftWithIndex(i))->GetLatestTime();
int time = earliest + (indiv->_proportions)[i] *
(latest-earliest);
times[i] = time;
sequencedTime seqTime = {i+1,time};
int runwayLabel = (indiv->_runways)[i];
pair<set<sequencedTime>::iterator,bool> result =
(sequencedTimes[runwayLabel-1]).insert(seqTime);
}
'runwayNum' is equal to 1
'indivSize' is equal to 10
They are arguments given to the program.
'earliest' and 'latest' are also data input to the program.
The arrays '_runways' and '_proportions' are of size 10 ('indivSize')
and contain the following values before entering the 'for' loop.
[runways] 1 1 1 1 1 1 1 1 1 1
[(aircraft)/proportion] (1)/0.074 (2)/0.000 (3)/0.057 (4)/0.033
(5)/0.031 (6)/0
..075 (7)/0.033 (8)/0.086 (9)/0.079 (10)/0.051
In the last execution, the first 'seqTime' is {1,160} and is inserted
ok and the second is {2,195} and makes the program crashes.
The 'sequencedTime' element is entirely defined as following:
struct sequencedTime {
int plane;
int time;
public:
bool operator<(const sequencedTime & st) const {
return (time <= st.time);
}
};
Using '<' or '<=' does not make a difference in the program's
behavior. That is it crashes at the second insertion with a 'cannot
read the memory' message.
I've done something pretty similar earlier in my program that works
with a vector of vector of int. Here is the code for this case:
vector< vector<int> > tmpSequences(runwayNum,vector<int>());
int * runways = new int[indivSize];
for(int i=0;i<indivSize;i++) {
int planeLabel = tmpSeq[i];
int runwayLabel = (rand()%runwayNum)+1;
runways[planeLabel-1] = runwayLabel;
tmpSequences[runwayLabel-1].push_back(planeLabel);
}
Again 'runwayNum' is equal to 1 and 'indivSize' to 10 and 'tmpSeq' is
an array of length 10 ('indivSize') that can be such as 3 4 5 1 7 9 6
2 10 8
Thanks to all of you for your help.
Hélène.