指针,指针,对他们不好,没有他们更糟
指针是存储某物在内存中的存储位置的数字,考虑到这一点,让我们深入研究您在那里所做的事情:
char* aux = (char*) malloc (strlen (vigia1)+1);
很好,您已经在称为heap的内存的某处创建了空间,并将新创建的内存空间的地址存储在 aux 中。
aux=vigia1;
操作,现在您已经用存储在 vigia1 中的数字覆盖了您“创建”的内存空间的地址,这恰好是另一个内存空间的地址。
vigia1=vigia2;
现在您将 vigia2 的值分配给 vigia1,这是一些内存空间的另一个地址。
vigia2=aux;
并且,到最后,您使 vigia2 指向以前由 vigia1 指向的内存区域。
free (aux);
现在,您正在释放aux 指向的内存。稍等一下,在此行上方的行中,您刚刚使 vigia2 指向同一个地址。难怪它没有任何用处:)
试图帮助你做你想做的事:
只要您没有任何约束要求您维护在内存中排序的列表节点,您就不需要复制节点的内容,只需使第一个节点的指针指向第二个节点的内存区域节点。
一个完美的交换将是:
char *aux; // you'll need an aux to make the swap, the normal stuff
aux = vigia1; // now aux points to the same address as vigia1
vigia1 = vigia2; // vigia1 now points to the contents of vigia2
vigia2 = aux; // and now vigia2 points to the content pointed previously by vigia1
/* and tada! the swap is done :D */