【发布时间】:2011-07-31 14:12:46
【问题描述】:
我正在尝试运行以下程序,但遇到了一些奇怪的错误:
文件 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));
}
请帮助解决问题的原因。谢谢。
【问题讨论】:
标签: c pointers function-pointers