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;