0

私のライブラリには、ライブラリに必要なすべてを含むインスタンス構造があります。これは、ライブラリの複数のインスタンスを定義できるようにするためです。ライブラリでは、ユーザーが独自の拡張機能またはカスタム変数を定義する必要があります。

これは私が試したものです:

Library.h

typedef struct custom_s *custom;

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

そして、ユーザーは次のことができます:

Main.c

// 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。あなたの例では、これは決して割り当てられない未定義のポインターであるため、アクセスしようとするとセグメンテーション違反が発生します。

不透明な構造の副作用の 1 つは、サイズがクライアント コードに認識されないことです。これは、それらを割り当て/作成するための独自の関数を作成する必要があることを意味します。

次のようにします。

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