Intanto non devi chiamare tutto quello che ti capita
data
altrimenti non si capisce nulla.
Ad esempio, potresti chiamare il tipo di dato, nodo
Poi, se vuoi usare un puntatore puoi chiamarlocodice:typedef struct data { int value; struct data *next; } nodo;
parray
e se deve essere un doppio puntatore (perche'?) allora dovrai scrivere (nota il sizeof)
nodo **parray = (nodo **)calloc(3, sizeof(nodo *));
e in seguito, allocare ogni puntatore con
parray[i] = (nodo *)calloc(1, sizeof(nodo));
per un array 3x1 ... ma il seguito del programma non si capisce ...