/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
std::map
Fra : Andreas Andersen


Dato : 19-01-05 13:17

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


 
 
Søg
Reklame
Statistik
Spørgsmål : 177451
Tips : 31962
Nyheder : 719565
Indlæg : 6408135
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste