que tengo una clase Foo
para el que he sobrecargado el operador + de la siguiente manera:una copia con los operadores sobrecargados
Foo Foo::operator+(const Bar &b)
{
Foo copy = (*this);
if (someCondition) return copy;
//snip
}
Para mí, esto parece razonable. Sin embargo, cada vez que devuelvo copia, Visual Studio me alerta de un error que 'puede deberse a una corrupción del montón'. ¿Hay algo mal con lo que hice?
editar: actualizando con más información.
El mensaje de error:
Windows ha desencadenado un punto de interrupción en sample.exe.
Esto puede ser debido a una corrupción de la montón, lo que indica un error en sample.exe o cualquiera de los DLL se ha cargados.
Esto también puede ser debido a la presión F12 usuario mientras sample.exe tiene enfoque.
La ventana de salida puede tener más información de diagnóstico .
El constructor de copia:
Foo::Foo(const Foo&p)
{
some_pointer = p.get_some_pointer();
some_value = p.get_some_value();
}
El código se rompe a:
//within dbgheap.c
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
if (!pUserData)
return FALSE;
if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
return FALSE;
return HeapValidate(_crtheap, 0, pHdr(pUserData));
}
¿Puede mostrarnos el constructor de copia de 'Foo'? –
¿Cuál es el código de error? – metdos
@ Space_C0wb0y @metdos He actualizado con más información – socks