44496

[code]

    struct Edge
    {
        int distance;
        char to;
        struct Edge *next;
    };
    
    struct Node
    {
        int visited;
        char name;
        int cost;
        struct node *from;
        struct Edge *edge;
        struct Node *next;
    }; 
    
    struct Node *p, *head, *edge;
    p = malloc(sizeof(p));
    head = malloc(sizeof(head));
    edge = malloc(sizeof(struct Node));
    
[/code]

struct Nodeの中にある構造体struct Edge *edgeのtoに値を代入したく、  
p->edge->to = 'X';  
のように書いたのですが、エラーになってしまいます。  
書き方を教えていただけるとありがたいです。  
よろしくお願いいたします。


CC BY-SA 4.0
2018-06-03T07:39:19.393
44495
2018-06-04T12:34:40.110
2018-06-04T03:32:10.937
13199
28763
question
c
構造体の中のポインタ変数をもつ構造体から各々のメンバに値を代入したい


> p = malloc(sizeof(p));

pは、ポインタなので、ポインタ分の領域しか確保されません。edgeの場合と同様に、structのサイズの確保が必要です。 また、p->edge
とありますが、ここの edgeは、グローバル(structの外側)で宣言している edgeとは別物なので、領域の確保がされていません。

例えば、実際に使うところで、

[code]

        p = malloc(sizeof(struct Node));
        p->edge = malloc(sizeof(struct Edge));
        p->edge->to = 'X';
    
[/code]

のようにすべきです。

なお、後始末(free)も忘れないように。 (後始末、大変そうなパターン)


CC BY-SA 4.0
2018-06-03T08:41:36.057
44496
2018-06-04T12:34:40.110
2018-06-04T12:34:40.110
44495
answer