我试图运行下面的程序,但得到一些奇怪的错误:C函数指针铸造空指针
文件1.C:
typedef unsigned long (*FN_GET_VAL)(void);
FN_GET_VAL gfnPtr;
void setCallback(const void *fnPointer)
{
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
文件2.C:
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 */
}
这里gfnPtr()在使用gcc编译时在64位suse linux上崩溃。但它成功地调用了gfnPtr()VC6和SunOS。
但是,如果我改变了下面给出的功能,它工作正常。
void setCallback(const void *fnPointer)
{
int i; // put any statement here
gfnPtr = *((FN_GET_VAL*) (&fnPointer));
}
请帮助解决问题的原因。谢谢。
感谢您的答复。我会小心不要混合数据和函数指针。但在这种情况下,我无法弄清楚发生这种情况的原因。如果我用-m32(32位)编译并运行,它工作得很好,但是如果我使用-m64(64位)编译它会给出问题。另外,如果我添加一个像** int i; **这样的语句,然后它就可以正常工作了。不知道可能堆栈损坏的原因,但如何检查。 – Manoj 2011-04-07 11:28:49