C 使用结构的函数会导致segfault

C 使用结构的函数会导致segfault,c,struct,segmentation-fault,function-pointers,C,Struct,Segmentation Fault,Function Pointers,我有一个结构,有两个指向函数和一些数据的指针。这些函数在定义上是相同的,但是它们应该执行不同的任务(这就是为什么它们在原始源代码中有不同的名称)。如果我使用第一个函数,一切都很顺利,但是如果我使用第二个函数,我会得到一个segfault-即使我向两个函数传递相同的指针 指针既不是NULL也不是垃圾,否则两者都会失败——但不知何故,只有后者会出错。为什么呢 我有以下代码: typedef void (*funcOneDef)(void*); typedef void (*funcTwoDef)(v

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

指针既不是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))be
structPt测试=malloc(sizeof(structImpl))

我建议您在这个版本和失败的版本之间选择“复活节彩蛋”。使用调试信息和所有警告进行编译,并学习使用调试器。在Linux上,用
gcc-Wall-g
编译,用
gdb
调试
test=malloc(sizeof(test))
是错误的;应该是
test=malloc(sizeof*test)
@melpomene谢谢,这很有效!我怀疑内存有问题,但不知何故没有进行测试..malloc(sizeof(structImpl))抛出一个错误,应该是:malloc(sizeof(structStructImpl));或malloc(sizeof*试验);但是是的,谢谢!