Memory leak con strings

Iniciado por amchacon, 9 Agosto 2013, 14:06 PM

0 Miembros y 1 Visitante están viendo este tema.

amchacon

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? *_*
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Eternal Idol

¿En base a que llegas a esa conclusion? Dudo que sea asi.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

amchacon

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
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Eternal Idol

#3
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
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón