使用struct的函数会导致段错误

时间:2012-12-02 13:33:48

标签: c struct segmentation-fault function-pointers

我有一个结构,有两个指向函数和一些数据的指针。这些函数在定义方面是相同的,但是它们应该执行不同的任务(这就是为什么它们在原始源中具有不同的名称)。如果我使用第一个函数,一切顺利,但如果我使用第二个函数,我会得到一个段错误 - 即使我将相同的指针传递给两个函数。

指针既不是NULL也不是垃圾,否则两者都会失败 - 但不知何故只有后者才会发生segfaulted。那是为什么?

我有以下代码:

typedef void (*funcOneDef)(void*);
typedef void (*funcTwoDef)(void*);
typedef struct structImpl* structPt;

struct structImpl {
    void *data;
    funcOneDef funcOne;
    funcTwoDef funcTwo;
}; 

structPt create(void *data, funcOneDef funcOne, funcTwoDef funcTwo)
{
    structPt test = malloc(sizeof(test));
    test->data = data;
    test->funcOne = funcOne;
    test->funcTwo = funcTwo;
    return test;
}

void execFuncOne(structPt test) 
{
    test->funcOne(test->data); //works!
}

void execFuncTwo(structPt test)
{
    test->funcTwo(test->data); //segfault!
}
PS:没有必要对此进行测试,因为不知何故这是有效的,但是我的原始资料 - 基本上是相同的 - 并不是吗?

1 个答案:

答案 0 :(得分:2)

structPt test = malloc(sizeof(test));不应该是structPt test = malloc(sizeof(structImpl));吗?