gpt4 book ai didi

c - 使用结构体的函数会导致段错误

转载 作者:行者123 更新时间:2023-11-30 14:22:33 26 4
gpt4 key购买 nike

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

指针既不是 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));吗?

关于c - 使用结构体的函数会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com