Alguien me puede explicar porqué?

22/07/2004 - 18:28 por Sergio | Informe spam
Os pongo en situación:

Estoy con un proyecto en vc++ documento/vista con una sola vista, en el
que si abro el programa y le doy a cerrar directamente me genera un Assert.

Haciendo esto el programa no hace absolutamente nada, muestra el
formulario sin nada, no tiene ni botones ni nada. Pero, y aquí esta lo
curioso, es que si le doy a abrir, da igual que abra un fichero, con su
correspondiente carga de datos, o que le a cancelar al dialogo de
apertura, con lo que el programa se que da igual que antes, pues ya no
me genera el error, y se cierra perfectamente.

Yo ya no entiendo nada, seguro que alguna vez he tocado algo que no
debia, pero no se lo que puede ser, y yo creo que esta todo bien.

Preguntas similare

Leer las respuestas

#1 Josema
22/07/2004 - 19:33 | Informe spam
Hola,

los Assert es una de las mejores herramientas de depuración que tenemos en
nuestros programas y no hay que ignorarlos.

Lo mejor que puedes hacer es cuando te salga el mensaje del assert, darle a
depurar y así ver en qué linea del programa te lo está dando. Según sea la
condición que evalua el Assert, te dará una pista de por donde van los
tiros.


"Sergio" escribió en el mensaje
news:O$
Os pongo en situación:

Estoy con un proyecto en vc++ documento/vista con una sola vista, en el
que si abro el programa y le doy a cerrar directamente me genera un


Assert.

Haciendo esto el programa no hace absolutamente nada, muestra el
formulario sin nada, no tiene ni botones ni nada. Pero, y aquí esta lo
curioso, es que si le doy a abrir, da igual que abra un fichero, con su
correspondiente carga de datos, o que le a cancelar al dialogo de
apertura, con lo que el programa se que da igual que antes, pues ya no
me genera el error, y se cierra perfectamente.

Yo ya no entiendo nada, seguro que alguna vez he tocado algo que no
debia, pero no se lo que puede ser, y yo creo que esta todo bien.
Respuesta Responder a este mensaje
#2 Sergio
23/07/2004 - 11:01 | Informe spam
Josema wrote:
Hola,

los Assert es una de las mejores herramientas de depuración que tenemos en
nuestros programas y no hay que ignorarlos.

Lo mejor que puedes hacer es cuando te salga el mensaje del assert, darle a
depurar y así ver en qué linea del programa te lo está dando. Según sea la
condición que evalua el Assert, te dará una pista de por donde van los
tiros.



Pues el assert me lo produce aquí:

CCmdTarget::~CCmdTarget()
{
#ifndef _AFX_NO_OLE_SUPPORT
if (m_xDispatch.m_vtbl != 0)
((COleDispatchImpl*)&m_xDispatch)->Disconnect();
ASSERT(m_dwRef <= 1);
#endif
#ifdef _AFXDLL
m_pModuleState = NULL;
#endif
}

m_dwRef en mi caso vale 2. No conozco muy bien el funcionamiento de esta
clase, pero me imagino que m_dwRef será un contador de objetos que se
hayan podido crear, y que por alguna razón el objeto en cuestion (puede
ser la vista o el documento) o bien al eliminarse no restan su valor, o
realmente no se eliminan.
Respuesta Responder a este mensaje
#3 Josema
24/07/2004 - 09:34 | Informe spam
Puede ser algun objeto del que estás creando dos instancias.


"Sergio" escribió en el mensaje
news:
Josema wrote:
> Hola,
>
> los Assert es una de las mejores herramientas de depuración que tenemos


en
> nuestros programas y no hay que ignorarlos.
>
> Lo mejor que puedes hacer es cuando te salga el mensaje del assert,


darle a
> depurar y así ver en qué linea del programa te lo está dando. Según sea


la
> condición que evalua el Assert, te dará una pista de por donde van los
> tiros.

Pues el assert me lo produce aquí:

CCmdTarget::~CCmdTarget()
{
#ifndef _AFX_NO_OLE_SUPPORT
if (m_xDispatch.m_vtbl != 0)
((COleDispatchImpl*)&m_xDispatch)->Disconnect();
ASSERT(m_dwRef <= 1);
#endif
#ifdef _AFXDLL
m_pModuleState = NULL;
#endif
}

m_dwRef en mi caso vale 2. No conozco muy bien el funcionamiento de esta
clase, pero me imagino que m_dwRef será un contador de objetos que se
hayan podido crear, y que por alguna razón el objeto en cuestion (puede
ser la vista o el documento) o bien al eliminarse no restan su valor, o
realmente no se eliminan.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida