Problem with template...
Thu Sep 12 05:36:00 GMT 2002
One of my co-worker has developped a template to instantiate a HashTable
and until recently everything was fine.
However, in the last few days he added a simple line (legitimate) that
cause all kind of problems on Linux but runs fine on Windows (I don't
know for other Unixes)
Here is the code...
template <class T_Key, class T_HashObj>
void HashTable<T_Key, T_HashObj>::Remove(T_Key oHKey, T_HashObj* poHObj)
int nHash = Hash(oHKey);
HashElement* poHsbl = NULL;
BucketObject* poDelete = NULL;
BucketObject* poCurrent =
(BucketObject *) mpapoHashBuckets[nHash]->GetHead();
poDelete = poCurrent;
poHsbl = (HashElement *) poCurrent->GetObj();
poCurrent = poCurrent->GetNext();
if (poHsbl &&
mfEqualFnctn(poHsbl->GetKey(), oHKey) &&
poHsbl->GetHashObjRef() == poHObj)
poHsbl = NULL;
mnHashObjs--; // <==== NEW LINE
I don't know why but when I step in the code down to this point and then
look at the execution step by step.. the new line is executed twice.
poCurrent starts with a valid pointer and poCurrent->GetNext() returns
NULL. The if (within the while) is executed as it should but when the
while condition is evaluated a second time, it jumps to NEW LINE before
exiting the function.
I tried reorganising the while loop but the problem is still there.
I am using GCC 3.1 on a i686-Linux (RedHat 7.2) system. The debugger I
used to step into the code is the latest release of GDB (5.2.1 installed
Thanks for you time.
More information about the Gcc-help