c – Valgrind – Invalid write of size 1 for strcpy
You need to malloc one more byte for temp->data
temp->data = malloc(strlen(node2->data)+1);
This is because you need the final byte to store then indicating the end of the string.
Not only do you need to add one to your malloc length, but also you cant swap strings using strcpy like you are doing. What if the first string was malloced with 10 bytes and the second with 29 bytes? When you copy to swap, you will overrun the first strings buffer. It would be best to swap the pointers. If
data is defined as a fixed length array, then what you are doing is ok, but then
temp could also be the same sized array instead of a node.