【发布时间】:2020-05-26 04:08:24
【问题描述】:
我有这个结构(双向链表,信息表示为 37 个指针的数组):
typedef struct list {
struct list* next;
struct list* prev;
char *arr[37];
} List;
而且我必须交换任意两个元素。我尝试通过指针交换它们,但我真的找不到解决方案(所以如果你能帮助我,我会很高兴)。 所以我想出了这个我从一开始就害怕的解决方案:
void swap_values(List *p1, List *p2) {
char **temparr = malloc(37 * sizeof(char*));
for (int i = 0; i < 37; i++) {
*(temparr + i) = malloc(sizeof(p1 -> arr[i]));
strcpy(temparr[i], p1 -> arr[i]);
}
for (int i = 0; i < 37; i++) {
strcpy(p1 -> arr[i], p2 -> arr[i]);
}
for (int i = 0; i < 37; i++) {
strcpy(p2 -> arr[i], temparr[i]);
free(*(temparr + i));
}
free(temparr);
}
这是交换内容的正确方法吗?感觉不对。提前致谢。
【问题讨论】:
-
代码不应使用
strcpy。对于每个i,只需交换两个指针。还有this question 讨论了如何交换双向链表的元素。 -
@user3386109 谢谢,我做到了,但是如何释放多余的内存?如果我是正确的,我使用 malloc 3 次,用于 p1、p2 和临时数组。我应该能够释放一个数组,对吗?
-
你根本不应该使用
malloc。代码应该一次交换一个指针。所以应该有一个temp变量声明为char *temp;