FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Wed Sep 11, 2013 04:17 PM
Buenas tardes,

He pasado mi aplicación a FWH 1302 y comenzaron las cuestiones por diferencia de versión (esta aplicación fue hecha originalmente con FWH 1004).

Hasta ahora todas las cuestiones de incompatibilidad parecían resueltas, pero surgió algo a lo que no le encuentro la vuelta.

Funciona correctamente durante horas y de pronto, al cerrar un dialog en el cual edito un campo de una DBF, aparece un mensaje de error:

Error irrecuperable 9011:
hb_xfree llamado con un puntero nulo


Y la aplicación deja de funcionar y se cierra.

He encontrado en el "Error.ch" de xHarbour el "HB_EI_XFREENULL" que sería el error correspondiente, pero de ahí no sé como seguir.

¿Alguna ayuda?

Gracias.

Rolando :-)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Wed Sep 11, 2013 06:28 PM

Rolando,

No tienes la lista de llamadas completa ? El "calls stack" que suele aparecer en hb_out.log o en error.log según se produzca GPF ó no.

Es para saber desde donde se ha usado ese puntero nulo.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Wed Sep 11, 2013 06:30 PM

Rolando,

Que versión de xHarbour estas usando ? Por favor usa la más reciente.

Cuando os convencereis de que hay que usar Harbour... :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Wed Sep 11, 2013 09:41 PM

Antonio,

Gracias por responder.

No generó ningún archivo .log al dar el error.

Estoy usando: xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 9421) >>>> Creo que es la última.

En cuando a convencerme de usar HARBOUR no tendría problema cuando, por lo que dices, sería para mejorar.

Supongo que en el foro encontraré como hacerlo o alguien me indicará como.

Rolando

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Wed Sep 11, 2013 11:08 PM

Rolando,

Como te aparece ese error ? En la ventana de terminal (msdos) ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 12:34 AM
Antonio,

Aparece un dialog tipo MsgInfo cuyo título es "Error irrecuperable 9011:" y el mensaje "hb_xfree llamado con un puntero nulo". Al aceptar, el mensaje se cierra y también la aplicación.

Como el error lo hace esporádicamente, cuando lo haga copiaré con printscreen y publicaré.

Gracias

Rolando :-)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 01:06 AM
Rolando,

Se me ocurre una posible forma de localizar el error, pero con el riesgo de que anulariamos el sistema de errores internos, asi que esta solucion solo deberias usarla hasta que localicemos de donde proviene.

Prueba a anadir este codigo a tu aplicacion y dime si te compila bien:

Code (fw): Select all Collapse
#pragma BEGINDUMP

#include <windows.h>

void hb_errInternal( int i1, int i2, int i3, int i4 )
{
   MessageBox( 0, "ahora yo controlo los errores internos", "ok", 0 );
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 01:21 AM
Aqui tienes un ejemplo completo de algo que no se debe hacer NUNCA, pero que en ocasiones puede ayudarnos mucho:

Fijate que gracias a este truco vamos a poder saber desde donde se ha generado el fatídico error interno de una forma
relativamente facil.

Code (fw): Select all Collapse
function Main()

   GeneroError()
   
return nil

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
#include <hbapierr.h>

HB_FUNC( GENEROERROR )
{
   hb_xfree( 0 );
}   

void hb_errInternal( HB_ERRCODE errCode, const char * szText, const char * szPar1, const char * szPar2 )
{
   hb_errRT_BASE( 0, 0, "intentando resolver un error interno", "probando", 0 );
}

#pragma ENDDUMP


regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 12:29 PM
Antonio,

Quizás no esté haciendo algo bien.

Puse tu código en un "Errores.prg". Al compilarlo en forma aislada no da ningún error, pero al compilar y enlazar con la aplicación, presenta estos errores:

Code (fw): Select all Collapse
Error E2356 D:\\RJCTaller\\PRGftp1302\\errores.prg 21: Type mismatch in redeclaration of 'hb_errInternal'
Error E2344 D:\xHarbour2012\INCLUDE\hbapierr.h 220: Earlier declaration of 'hb_errInternal'
Warning W8057 D:\\RJCTaller\\PRGftp1302\\errores.prg 23: Parameter 'errCode' is never used in function hb_errInternal
*** 2 errors in Compile ***
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Fatal: Unable to open file 'ERRORES.OBJ'
RJCElectronica.EXE - 3 error(es), 1 advertencia(s)


Este es el PRG:
Code (fw): Select all Collapse
function Main()

   GeneroError()
   
return nil

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
#include <hbapierr.h>

HB_FUNC( GENEROERROR )
{
   hb_xfree( 0 );
}   

void hb_errInternal( HB_ERRCODE errCode, const char * szText, const char * szPar1, const char * szPar2 )
{
   hb_errRT_BASE( 0, 0, "intentando resolver un error interno", "probando", 0 );
}

#pragma ENDDUMP


Gracias.

Rolando :-)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 12:37 PM

Rolando,

Con xHarbour tienes que cambiar esta línea asi:

void hb_errInternal( ULONG ulIntCode, const char * szText, const char * szPar1, const char * szPar2 )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 01:57 PM

Antonio,

Hice lo que indicaste y ahora compila sin problemas.

Puse una llamada a la funcion en el activate window de la window principal y la función se activa ok.

La pregunta es: ¿cómo debo usarlo para que indique el error cuando realmente se produzca?.

Gracias.

Rolando :D

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 04:36 PM

Rolando,

Cuando el error se produzca, tu función hb_errInternal() funcionará automaticamente :-)

y te mostrará desde donde se produce el error interno

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 05:13 PM
Antonio,

Comprendido.

Surgió algo nuevo al recompilar y enlazar todo. El UE muestra un warning:

Code (fw): Select all Collapse
Warning W8057 D:\\RJCTaller\\PRGftp1302\\errores.prg 24: Parameter 'ulIntCode' is never used in function hb_errInternal


Como no entiendo bien esta función, no se si será importante o no. Muchas gracias.

Rolando :-)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 06:12 PM

Es solo un aviso sin importancia de que un parámetro no se está usando. Es correcto.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu
Posted: Thu Sep 12, 2013 06:23 PM

Ok, Gracias.

Ya está funcionando. Hoy "justamente" no dio error en toda la jornada.

Pero cuando lo haga, estará preparado. Gracias.

Rolando :D