我有一个结构,有两个指向函数和一些数据的指针。这些函数在定义上是相同的,但是它们应该执行不同的任务(这就是为什么它们在原始源代码中具有不同的名称)。如果我使用第一个函数,一切顺利,但是如果我使用第二个函数,我会得到一个段错误 - 即使我将相同的指针传递给两个函数。
指针既不是 NULL 也不是垃圾,否则两者都会失败 - 但不知何故只有后者会出错。为什么?
我有以下代码:
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:无需对此进行测试,因为不知何故这有效,但是我的原始来源(基本相同)没有?
不应该structPt test = malloc(sizeof(test));
行structPt test = malloc(sizeof(structImpl));
吗?