0

在我的库中,我有一个实例结构,其中包含库所需的所有内容,这样您就可以定义库的多个实例。该库要求用户定义自己的扩展或自定义变量。

这是我尝试过的:

图书馆.h

typedef struct custom_s *custom;

typedef struct {
    int a;
    int b;
    custom customs;
} instance;

然后用户可以这样做:

主程序

// User sets their own custom structure
struct custom_s {
    int c;
};

int main(void) {
    instance test;
    test.customs.c = 1;
}

但是我收到“分段错误”的错误。

4

2 回答 2

1

不应该是:

test.customs->c = 1

既然你输入了它

typedef struct custom_s *custom;

并用作

custom在实例结构中。

哪个永远不会分配...

于 2013-08-29T18:01:11.113 回答
1
typedef struct custom_s *custom;

定义一个指向结构的指针custom。在您的示例中,这是一个从未分配过的未定义指针,因此当您尝试访问它时会发生分段错误。

不透明结构的一个副作用是客户端代码不知道大小。这意味着您必须创建自己的函数来分配/创建它们。

做类似的事情:

instance test;
test.customs = customs_create();
test.customs.c = 1;
于 2013-08-29T18:01:24.090 回答