Me parece que ya se cual es el error, que pasa si la cadena que vas a copiar es mas grande que el tamaño de la variable. En ese caso habria corrupcion de memoria, y por lo tanto, un segment fault.
Seria mejor que utilizaras
strncpy en lugar de
strcpy, ya que de esa forma garantizas que nunca trataras de leer mas caracteres de los que puede guardar tu variable, recuerda siempre leer un caracter menos del tamaño de tu arreglo, para guardar lugar al caracter de fin de cadena ' '
En este caso tu variable tiene 19 espacios, entonces lees 18, y en la ultima posicion que es la 18 guardas el ' '. Recuerda, los arreglos comienzan en cero, por lo tanto un arreglo de 19 espacios va del 0 al 18
aux=(struct ristras_numericas *)malloc(sizeof(struct ristras_numericas));
p=strtok(cadena,"!n");
strncpy(aux->ristra_numerica, p, 18);
aux->ristra_numerica[18] = ' ';
Saludos