传递函数指针时出现分段错误

时间:2013-04-17 11:30:28

标签: c++ segmentation-fault

我正在使用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,则可以。

不知道是什么问题。

0 个答案:

没有答案