» »

[C++] Vectorji povzročajo memory leake

[C++] Vectorji povzročajo memory leake

gtu ::

Pozdravljeni,
malo sem začel optimirati kodo nekega programa. Zdelo se mi je da porablja kar precej rama in tudi vedno več.
Uporabil sem navodila s te splete strani.
 include

include


Za prikaz sem upoarbil ta ukaz:
 funkcija

funkcija



Odziv je bil tak:
 leakage

leakage



V kodi imam točno 19 vektorjev, točno toliko mi ta funkcija pokaže leakov. Vsi so znotraj podrejenih scopov, kot je funkcija za prikaz leakov, zato mislim, da jih nebi smelo biti več v spominu.

Prosim za malo pomoči kako bi to lahko rešil.
Hvala

Vesoljc ::

vektorjev as in std:vector? filas notr instance ali pointerje?
Abnormal behavior of abnormal brain makes me normal...

sas084 ::

Sam std::vector ne povzroča leakov, povzročajo jih objekti, ki so shranjeni v njem (recimo pointerji na objekte itd. - primer). Malo več boš mogu povedat o tej kodi ker iz tega kar si do zdaj napisu se ne da nič pametnega razbrati.

gtu ::

Tako recimo deklariram en vektor točk. Rabim znotraj neke zanke. Takoj za tem ga zbiršem, za vsak slučaj :) in nato napolnim z vrednostmi:

vector <Point>  ogljiscaObmocij;
ogljiscaObmocij.clear();

for (int i = 0; i < stIteracij; i++){

    //nekaj kode dodatne kode za preračun x in y
 
    ogljiscaObmocij.push_back(Point(x, y));

}

Tako nekako.
Ne uporabljam nikjer vektorja pointerjev.
Upam da sem dovolj pokazal.

Zgodovina sprememb…

  • spremenil: gtu ()

sas084 ::

Ne vidim problema če uporablaš objekte. Mogoče maš leake v samem Point objektu. Verjetno je odvisno tud od same uporabe funkcije _CrtDumpMemoryLeaks();
vector <Point>  ogljiscaObmocij;
ogljiscaObmocij.clear();
 
for (int i = 0; i < stIteracij; i++){
 
    //nekaj kode dodatne kode za preračun x in y
  
    ogljiscaObmocij.push_back(Point(x, y));
 
}
_CrtDumpMemoryLeaks();


Ta varjanta ti pomoje javi memory leake tud za memory, ki ga zaseda vektor in Point objekti ki dejansko niso memory leaki.
Probi ta primer ko gre vektor out of scope če ti javi memory leake:
{
  vector <Point>  ogljiscaObmocij;
  ogljiscaObmocij.clear();
 
  for (int i = 0; i < stIteracij; i++){
 
      //nekaj kode dodatne kode za preračun x in y
  
      ogljiscaObmocij.push_back(Point(x, y));
 
  }
}
_CrtDumpMemoryLeaks();


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c++ ned help

Oddelek: Programiranje
92247 (1975) barcaFan
»

[C++] Ali je mogoče?

Oddelek: Programiranje
162151 (1627) Ciklamen
»

Pomoč pri programiranju z javo

Oddelek: Programiranje
204317 (3244) milc
»

[VC++] čuden memory leak

Oddelek: Programiranje
162161 (1866) Senitel
»

[c++] Pomoč pri izdelavi std::vector "wrapperja"

Oddelek: Programiranje
82013 (1914) zhigatsey

Več podobnih tem