我正在使用 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 ,它就可以工作。
不知道是什么问题。