copiando la estructura en la lista enlazada

Aquí estoy copiando la estructura de un nodo a otro, pero cuando encuentre el último nodo tendré una falla de segmentación, ya que temp_clsf->next en memcpy apuntará a una ubicación no válida, ¿cómo puedo solucionar esto? No puedo liberar temp_clsf ya que no es una asignación dinámica.

 while(temp_clsf!=NULL) { memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier)); if(temp_clsf->next ==NULL) return; else temp_clsf = temp_clsf->next; } 

Dentro del bucle, mantenga un puntero al nodo anterior. Cuando el bucle termina, actualice ese nodo con un puntero a NULL

 /* pseudo-code */ while () { prev = curr; /* ... */ } prev->next = NULL; 

Solo mueve la copia despues de if

  while(temp_clsf!=NULL) { if(temp_clsf->next ==NULL) return; //else memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier)); temp_clsf = temp_clsf->next; } 

utilizar las siguientes condiciones en while.

 while(temp_clsf->next!=NULL) 

Potencialmente, temp_clsf->next podría ser NULL así que mueve la comprobación NULL antes de memcpy

 while(temp_clsf != NULL) { if(temp_clsf->next == NULL) { return; } memcpy(&temp_clsf, &temp_clsf->next, sizeof(struct classifier)); temp_clsf = temp_clsf->next; } 

Actualización : temp_clsf y temp_clsf->next parecen punteros a mí. Entonces tu memcpy está tomando direcciones de punteros y sobrescribiendo lo que está allí. ¿Es esta tu intención? No estoy seguro de qué sizeof(struct classifier) porque no tenemos los tipos de estructura en su ejemplo.

Parece que estás haciendo un cambio de elementos, potencialmente para eliminar uno. Si se tratara de una matriz ordenada, no habría necesidad de usar el next puntero. No estoy seguro de qué otra asignación estática está utilizando, pero simplemente puede hacer lo siguiente para eliminar el único elemento temp_clsf->next :

 temp_clsf->next=temp_clsf->next->next;