Hej
 
 Jeg har nedenstående program (i meget forkortet form):
 
 #include <iostream>
 #include <map>
 #include <list>
 
 using namespace std;
 
 template<class WeightType>
 class Node {
 public:
    Node() {
    }
    ~Node() {
    }
 };
 
 template<class WeightType>
 class TB {
 public:
    typedef Node<WeightType> _Node;
 
    TB() {};
 
    ~TB() {
      typename list<_Node*>::iterator iter;
      _Node *temp;
      iter = nodes.begin();
      while (iter != nodes.end()) {
        temp = (*iter);
        iter = nodes.erase(iter);
        delete temp;
      }
    }
    
    _Node* insertNode(map<_Node*, WeightType> m1, map<_Node*, WeightType> 
 m2) {
      _Node *result = new _Node();
      nodes.push_back(result);
      return result;
    };
 
 private:
    list<_Node*> nodes;
 };
 
 int main(int argc, char **argv) {      
    Node<int> *firstNode, *secondNode, *thirdNode;
    map<Node<int>*, int> weightsFrom, weightsTo;
    map<Node<int>*, int>::iterator iter;
    TB<int> *tb;
    for (int i = 0; i < 2; i++) {
      tb = new TB<int>();
      weightsFrom.clear(); weightsTo.clear();
      firstNode = tb->insertNode(weightsFrom, weightsTo);
      secondNode = tb->insertNode(weightsFrom, weightsTo);
      weightsFrom[firstNode] = 45;
      weightsFrom[secondNode] = 77;
      thirdNode = tb->insertNode(weightsFrom, weightsTo);
      for (iter = weightsFrom.begin(); iter != weightsFrom.end(); iter++)
        cout << "Weight: " << iter->second << endl;
      firstNode = secondNode = thirdNode = NULL;
      delete tb;
    }
    return 0;
 }
 
 En forekomst af TB vedligeholder altså blot en liste af knuder i en 
 graf. Problemet er at de to vægte, 77 og 45, i testprogrammet bliver 
 skrevet ud i omvendt rækkefølge anden gang for-løkken køres. Hvis jeg 
 udkommenterer "delete temp" i destructoren for TB, bliver de derimod 
 skrevet ud i samme rækkefølge begge gange. Umiddelbart ville dette ikke 
 undre mig, da jeg jo ikke kan vide hvilken pointer der "kommer først", 
 men i det fulde program kan jeg se at problemerne begynder så snart 
 vægtene bliver byttet om i mine maps, selvom algoritmen ikke er afhængig 
 af rækkefølgen. Derfor tror jeg jeg må have et eller andet 
 hukommelsesproblem i ovenstående testprogram, men jeg kan ikke 
 gennemskue hvad det skulle være.
 
 /Andreas
 
  
            
             |