指向结构和函数指针的指针 - > Seg 错误

Pointer to struct & function pointers -> Seg Fault

本文关键字:指针 gt 错误 Seg 结构 函数      更新时间:2023-10-16

在执行这个测试程序时,我总是得到一个分段错误。我不知道为什么。也许有人能给我解释一下,我肯定我把指针的东西弄混了。

#include <stdio.h>
struct xy {
    int         (*read)();
    void        (*write)(int);
};
struct z {
    struct xy    *st_xy;
};

static void write_val(int val)
{
    printf("write %dn", 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 %dn", ret);
    ret2 = reset(&test);
    printf("reset returned with %dn", 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);

将指向xy的未初始化指针传递给init函数。

init(test.st_xy);

st_xy未初始化。我认为st_xy没有必要是一个指针。

struct z {
   struct xy st_xy;
};
int main(int argc, char **argv)
{
  static struct z test;
  init(&test.st_xy);
}