Page 1 of 2

Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Wed Sep 11, 2013 4:17 pm
by rolando
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 :D

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Wed Sep 11, 2013 6:28 pm
by Antonio Linares
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.

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Wed Sep 11, 2013 6:30 pm
by Antonio Linares
Rolando,

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

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

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Wed Sep 11, 2013 9:41 pm
by rolando
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

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Wed Sep 11, 2013 11:08 pm
by Antonio Linares
Rolando,

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

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 12:34 am
by rolando
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 :D

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 1:06 am
by Antonio Linares
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: Select all  Expand view

#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
 

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 1:21 am
by Antonio Linares
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: Select all  Expand view
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


Image

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 12:29 pm
by rolando
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: Select all  Expand view
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: Select all  Expand view
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 :D

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 12:37 pm
by Antonio Linares
Rolando,

Con xHarbour tienes que cambiar esta línea asi:

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

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 1:57 pm
by rolando
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

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 4:36 pm
by Antonio Linares
Rolando,

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

y te mostrará desde donde se produce el error interno

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 5:13 pm
by rolando
Antonio,

Comprendido.

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

Code: Select all  Expand view
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 :D

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 6:12 pm
by Antonio Linares
Es solo un aviso sin importancia de que un parámetro no se está usando. Es correcto.

Re: Error irrecuperable 9011: hb_xfree llamado con un puntero nu

PostPosted: Thu Sep 12, 2013 6:23 pm
by rolando
Ok, Gracias.

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

Pero cuando lo haga, estará preparado. Gracias.

Rolando :D