|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2004
Messaggi: 216
|
[C++] Memory leaks con i <vector>
Vi scrivo il codice delle varie classei
Codice:
#include <Windows.h>
#include <vector>
#include <crtdbg.h>
#include "classe_a.h"
using namespace std;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
PtrA->Init();
int h;
h=0;
return h;
}
Codice:
//File classe_a.h
class ClasseA
{
public:
ClasseA();
virtual void Init();
};
extern ClasseA* PtrA;
//File classe_a.cpp
#include "classe_a.h"
ClasseA::ClasseA()
{
}
void ClasseA::Init()
{
int fkf=0;
}
Codice:
//File classe_b.h
#include <Windows.h>
#include "classe_a.h"
class Bb: public ClasseA
{
public:
Bb();
void Init();
};
//File classe_b.cpp
#include "classe_b.h"
#include <vector>
using namespace std;
ClasseA* PtrA = new Bb();
Bb::Bb():ClasseA()
{
}
void Bb::Init()
{
vector<int> ss;
ss.push_back(43);
ss.clear();
}
Questo codice genera memory leak quando faccio ss.push_back(43);, perchè? i vector di int come possono generare memory leak Aiuto |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
ho dato una lettura veloce visto l'ora ma credo che tu non deallochi la classe che istanzi.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
posto che comunque nelle FAQ di stl e stlport si afferma che il distruttore della classe contenitore cerca di minimizzare allocazioni e deallocazioni consecutive... a parte che quel codice mi sembra inutilmente contorto ... e ah, perchè questa riga di codice ClasseA* PtrA = new Bb(); è "vagante" ?
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 04-02-2007 alle 11:37. |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Sep 2004
Messaggi: 216
|
Si avete ragione non ho fatto il delete della classe istanziata, comunque ho riportato male la classe_b
Codice:
//File classe_b.h
#include "classe_a.h"
#include <Windows.h>
#include <vector>
using namespace std;
class Bb: public ClasseA
{
public:
Bb();
void Init();
vector <int> ss;
};
//File classe_b.cpp
#include "classe_b.h"
ClasseA* PtrA = new Bb();
Bb::Bb():ClasseA()
{
}
void Bb::Init()
{
ss.push_back(43);
}
Codice:
Detected memory leaks!
Dumping objects ->
{241} normal block at 0x00366A98, 4 bytes long.
Data: <+ > 2B 00 00 00
Object dump complete.
The program '[1740] gtgtgtgt.exe: Native' has exited with code 0 (0x0).
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:10.



















