Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: amchacon en 9 Agosto 2013, 14:06 PM

Título: Memory leak con strings
Publicado por: amchacon en 9 Agosto 2013, 14:06 PM
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

class foo
{


public:
      string str;
    foo() : str(1000000,'a')
    {

    }
    ~foo()
    {
        cout<<"Destructor invocado";
    }
};

int main()
{


    cout << "Presione para construir f";
    cin.get();


    foo* f = new foo;


    cout << "Presione para destruir f";
    cin.get();

    delete f;

    cout << "Presione para salir del programa";
    cin.get();
}


¿Por qué la memoria no se libera al destruir el objeto foo? *_*
Título: Re: Memory leak con strings
Publicado por: Eternal Idol en 9 Agosto 2013, 15:11 PM
¿En base a que llegas a esa conclusion? Dudo que sea asi.
Título: Re: Memory leak con strings
Publicado por: amchacon en 9 Agosto 2013, 15:13 PM
Cita de: Eternal Idol en  9 Agosto 2013, 15:11 PM
¿En base a que llegas a esa conclusion? Dudo que sea asi.
Mirando el consumo del programa en el administrador de tareas
Título: Re: Memory leak con strings
Publicado por: Eternal Idol en 9 Agosto 2013, 15:25 PM
No se cuales columnas estaras viendo pero si depuras y/o desensamblas el programa podras ve como no es correcta tu conclusion.

Por ejemplo dentro del destructor de foo y antes de salir se llama a:
call   ILT+570(??1?$basic_stringDU?$char_traitsDstdV?$allocatorD

que a su vez salta a

ILT+570(??1?$basic_stringDU?$char_traitsDstdV?$allocatorD:
jmp std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >

Si lo depuras podes ver como dentro del string el puntero a memoria que use (yo estoy en VC++ y es _Bx->_Ptr) deja de ser valido.



EDITO

Con 10mb tal vez lo veas mas claro:

Código (c++) [Seleccionar]
foo() : str(10485760/*1000000*/,'a')

1) Espacio de trabajo: 2040KB Memoria: 520KB
2) Espacio de trabajo: 12312KB Memoria: 10784KB
3) Espacio de trabajo: 2048KB Memoria: 520KB