A parte i controlli sugli if che ti avevo già corretto...per il resto sono assolutamente equivalenti. struct non serve su un typedef.
Qui però in effetti serviva:
gradients [i]=(nodesptr) malloc ((4)*sizeof (
nodes));
Però strano che non abbia dato errore in compilazione