Hi Maik,

It looks like I completely overlooked your message yesterday. I've been 
playing with your idea a bit. Some more comments below.

On Wednesday 15 November 2006 19:53, Maik Justus wrote:
> Hi,
>
> I built a version with debug info only for this file and got, as
> expected, normal performance.
> The problem is in line 807:
>     if (i != current)
> I have not much experience with overloaded comparators, but it seems to
> me, that not the "pointers" are compared in this case, but the complete

That is not what is supposed to happen: I'm not comparing whether the two 
objects the iterators are pointing to are identical or not, but whether the 
two iterators themselves are pointing to the same object. 
'current' is pointing to a valid object (which is established at the beginning 
of the function, and "i" is also pointing to a valid object (because it 
iterates between  towerController->getActiveTraffic().begin(); and 
towerController->getActiveTraffic().end()

the overloaded object comparison would be something like:

if ((*current) == (*i))

I've added a bool operator == (const FGTrafficRecord &right) const {return id 
== right.id;} as you suggested, and added a few debug warning messages to it 
to see whether it got called, which it didn't. So, I'm pretty sure that the 
code above is actually just comparing whether the two iterators are pointing 
to the same object or not.

> structure. But "current" holds an invalid pointer in its structure:
> (((*(current)._Myptr).runway))._Bx

I did find out that I never assigned a value to runway, in case of traffic 
that is on the ground network (whereas I do assign a runway for traffic that 
is waiting for take-off).

> I don't know how this can happen, that the string "runway" contains a
> invalid pointer, but this seems to cause the crash. Maybe another
> pointer writing on this pointer? Or did you copy the address of this
> FGTrafficRecord (or of the string runway) and call the destructor?

Hmm, no, not likely: I'm not acessing the runway string other than by copying 
a value into it. So assuming stl string has a correct copy constructor, this 
should work out okay. 

>
> For performance reason I would suggest to add an operator == to class
> FGTrafficRecord, esp.:
> bool operator == (const FGTrafficRecord &right) const {return id ==
> right.id;}
> if "id" is sufficient to compare two FGTrafficRecords.
>
Yes, that would be sufficient, is you were comparing objects, but here is 
really is only comparing pointers. 

Still, the code still seems to crash on your system. so something's gotta be 
wrong. 


Cheers,
Durk

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to