構造体へのポインターを確保した後、構造体へのポインター(アドレス)を代入してからでないと、構造体メンバーへはアクセスできません。
struct cell *p;
と構造体へのポインターを確保しても、直ぐに
p->value = 10;
と書いてもエラーになります。
確保したポインターに実際のアドレスを代入する必要があります。
struct cell a;
p = &a;
もしくは、
p = (struct cell *)malloc(sizeof(struct cell));
としてから、構造体へのポインターへのアクセスが可能になります。