0

変数フィールドに関数を割り当てようとしていますが、セグメンテーション違反が発生します。コードは次のとおりです。

typedef struct node{
    int info;
    struct node *link;
    void* (*make) (int x);
}node;

void* make_node(int x)
{
    node* new_node = (node*)malloc(sizeof(node));
    new_node->info = x;
    new_node->link = NULL;
    return new_node;
}

int main(){
  struct node *n;
  n->make = make_node;
  return 0;
}

何が間違っている可能性がありますか?

4

5 に答える 5

2

ヒープ上のノードにスペースを割り当てるか、ポインターの代わりに構造体の通常の変数を使用する必要があります。

于 2012-04-07T16:36:41.053 に答える
0

n に値を割り当てるのを忘れました。

  1. make_node の戻り値の型を node* に変更します
  2. n=make_node(x) を行う

そして、 http: //www.amazon.com/gp/aw/d/0131103628/ref=redir_mdp_mobile を読むことを強くお勧めします。 これが今できる最善のことです。

于 2012-04-07T16:32:15.337 に答える
0

n次の方法で、スタックにスペースを割り当てることができます。

int main() {
  struct node n;
  n.make = make_node;
  return 0;
}

それ以外の場合は、おそらくグローバル変数として、または を使用してヒープに割り当てる必要がありますmalloc()

于 2012-04-07T17:10:13.527 に答える