Estoy tratando de ejecutar el programa siguiente, pero conseguir algunos errores extraños: 1.cC puntero de función de conversión para anular puntero
del archivo:
typedef unsigned long (*FN_GET_VAL)(void);
FN_GET_VAL gfnPtr;
void setCallback(const void *fnPointer)
{
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
2.c del archivo:
extern FN_GET_VAL gfnPtr;
unsigned long myfunc(void)
{
return 0;
}
main()
{
setCallback((void*)myfunc);
gfnPtr(); /* Crashing as value was not properly
assigned in setCallback function */
}
Aquí el gfnPtr() se cuelga en suse linux de 64 bits cuando se compila con gcc. Pero está llamando con éxito a gfnPtr() VC6 y SunOS.
Pero si cambio la función como se indica a continuación, está funcionando correctamente.
void setCallback(const void *fnPointer)
{
int i; // put any statement here
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
Ayuda con la causa del problema. Gracias.
Gracias por sus respuestas. Me preocuparía no mezclar datos y punteros de función. Pero en este caso no soy capaz de descubrir la razón por la cual esto está sucediendo. Si compilo y ejecuto con -m32 (32 Bit) funciona perfectamente bien, pero si compilo con -m64 (64Bit) está dando el problema. Además, si agrego una sola instrucción como ** int i; ** por encima de la asignación, está funcionando bien. No estoy seguro de la razón, quizás, de la corrupción, sino de cómo verificarla. – Manoj