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));

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