我正在使用Solaris。我得到分段错误的代码在里面.so。我们有很少的静态函数,基本上这些函数是回调函数。我通过将其地址传递给另一个函数将这些函数设置为回调函数。仅作为其中一个函数,其作为参数传递之前的地址看起来是正确的,但是在进入函数设置函数指针之后,它变成了一些垃圾指针并通过该指针调用函数崩溃。 我正在提供一些示例代码,它不是实际代码,但它与此类似。
在A.cpp中,我有三个回调函数
static void Func1(A* ptr)
{
}
static void Func2(A* ptr)
{
}
static void Func3(A* ptr)
{
}
在一个寄存器功能中,我将它们指定为回调函数
void vRegisterCallback(void (*ptrToFunc)(void*))
{
}
void Register()
{
vRegisterCallback(void (*)(void*)Func1);
vRegisterCallback(void (*)(void*)Func2);
vRegisterCallback(void (*)(void*)Func3);
}
我注册了三个功能,如上所述
Func1
指针有效,但是当它作为参数传递给vRegisterCallback
时。 vRegisterCallback
的地址与Func1
不同。
如果我在上面添加printf
语句,则可以使用发送到vRegisterCallback
的有效指针
如果我将Func1
从静态更改为非静态,则可以正常工作...
如果我将.so更改为.a,则可以。
不知道是什么问题。