gpt4 book ai didi

c++ - 指向结构和函数指针的指针 -> 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:11 25 4
gpt4 key购买 nike

在执行这个测试程序的过程中,我总是遇到段错误。我不知道为什么。也许有人可以向我解释一下,我确定我混淆了指针的东西。

#include <stdio.h>

struct xy {
int (*read)();
void (*write)(int);
};

struct z {
struct xy *st_xy;
};


static void write_val(int val)
{
printf("write %d\n", val);
}

static int read_val()
{
/* return something just for testing */
return 100;
}

int init(struct xy *cfg)
{
cfg->read = read_val;
cfg->write = write_val;
return 0;
}

int reset(struct z *st_z)
{
/* write something just for testing */
st_z->st_xy->write(111);

return 55;
}

int main(int argc, char **argv)
{
static struct z test;
int ret;
int ret2;

ret = init(test.st_xy);
printf("init returned with %d\n", ret);

ret2 = reset(&test);
printf("reset returned with %d\n", ret2);

return 0;
}

最佳答案

您永远不会分配实际的 xy 对象。您的 test.st_xy 只是一个不允许取消引用的垃圾指针。

相反,做这样的事情:

 static struct z test;
static struct xy inner_test;
test.st_xy = &inner_test;

// ...

ret = init(test.st_xy);

关于c++ - 指向结构和函数指针的指针 -> 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7608144/

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