tak ted to teda taky stoupa, ale na druhou stranu o dost mirneji.
Příspěvky odeslané z IP adresy 89.176.233.–
Tak jsem to jak se zda vyresil... problem byl, ze sice jsem to predaval, ale kdyz nic nenasel, tak jsem predaval NULL a nemazala se pamet
if (successorFound){
newAdjacencies[0]->at(iToChange)->at(jToChange) = 0;
newAdjacencies[0]->at(jToChange)->at(iToChange) = 0;
for (int i=0; i<2; i++){
states[i] = new State(newAdjacencies[i], this->depth+1, this->numberOfVertices*iToChange+jToChange);
}
} else {
for(int adjacency_index = 0; adjacency_index < 2; adjacency_index++ ){
for(int i = 0; i < this->numberOfVertices; i++){
delete newAdjacencies[adjacency_index]->at(i);
}
}
delete newAdjacency;
delete [] states;
delete [] newAdjacencies;
states = NULL;
}
http://semtex.wz.cz/memory.jpg
To Dawe :
kdyz jsem to zkousel vymazat na konci funkce getSuccessors, tak mi to skonci s chybou (smazu to tomu novemu stavu)
To Dawe :
ono to je v nejake pridavne knihovne asi vid?
ja prave muzu vyuzit jen tu standartni
To Palmik :
diky za odpoved
ja jsem prave myslel, ze tu pamet uvolnuju prave v destruktoru:
v getSuccessors si vytvorim nove stavy:
new State(newAdjacencies[i], this->depth+1, this->numberOfVertices*iToChange+jToChange);
tyto stavy po vytvoreni se matice ulozi do adjacency:
this->adjacency = adjacency;
a pak pri mazani stavu v destruktoru smazu tuto matici
State::~State() {
for(int i = 0; i < this->numberOfVertices; i ++){
delete this->adjacency->at(i);
}
delete this->adjacency;
}
to je spatny zpusob? Teda zjevne asi jo, protoze ta pamet narusta
jeste matrix je definovana takto typedef std::vector< std::vector<int>* > matrix;
Ahoj, rad bych se zeptal tech kteri ovladaji C++.
Hlavni problem se tyka mazani pameti.
Zkusim trosku popsat situaci:
Mam zasobnik a do nej si vkladam stavy. Stav muze vygenerovat 2 sousedy. Zasobnik prochazim a nevhodne sousedy mazu a vhodne sousedy vkladam do zasobniku. Problem je v mazani stavu.
sousedy ziskam timto zpusobem - vytvorim si pole sousedu (ty jsou ted vzdy 2), pro kazdy pole zkopiruju aktualni stav a u jednoho ze stavu zmenim jednu hodnotu v matici na 0. Vytvorim si stavy a ty vratim.
http://paste-it.net/private/hbf4e62/
tak se mi stejne nejak nesmaze vse a stale narusta pamet az aplikace spadne. Pritom v zasobniku je vzdy +- max 20 stavu
prosim muzete poradit jak na tu pamet. .diky