void myfun2(Node* head1, Node* head2) { int c = 0; int* p = (int*)malloc((c) * sizeof(int)); while (head1) { Node* temp = head2; while (temp) { if (head1->data == temp->data) { temp = temp->next; continue; } else { int* q = (int*)malloc((c + 1) * sizeof(int)); for (int i = 0; i < c; ++i) q[i] = p[i]; free(p); p = q; p[c] = temp->data; q = NULL; c += 1; } temp = temp->next; } head1 = head1->next; } while (head1) { int* q = (int*)malloc((c + 1) * sizeof(int)); for (int i = 0; i < c; ++i) q[i] = p[i]; free(p); p = q; p[c] = head1->data; q = NULL; c += 1; } BubbleSort(p, c); for (int i = 0;i < c;++i) printf("%d ", p[i]); printf("\n"); } void BubbleSort(int sdata[], int count) { for (int i = 0; i < count - 1; ++i) for (int j = 0; j < count - 1 - i; ++j) if (sdata[j] > sdata[j + 1]) { int temp = sdata[j]; sdata[j] = sdata[j + 1]; sdata[j + 1] = temp; } }这段代码有什么问题
时间: 2023-12-08 14:04:17 浏览: 64
myfun1.rar_myfun1
这段代码存在以下问题:
1. 在第2行中,将c初始化为0,然后在第3行中使用它作为动态分配内存的大小,这将导致分配的内存大小为0字节。
2. 在第4行中,动态分配了一个int类型的指针p,但是没有为其分配内存。因此,在第11行中使用p时,会导致未定义的行为(UB)。
3. 在第9-18行中,每次找到不相等的节点时,都会创建一个新的辅助数组q,将原来的数组p的元素复制到q中,然后释放原来的数组p,将q赋值给p。这种做法会导致频繁的内存分配和释放,非常低效,容易造成内存泄漏和内存碎片。
4. 在第21-26行中,应该是while(head2),而不是while(head1),因为head1已经为空了。
5. 在第28-33行中,同样存在动态分配内存的问题,应该先检查p是否为空,如果为空,需要先动态分配内存,然后再将head1的data赋值给p[c]。
6. 在第35行中,应该使用count而不是c,因为c可能是0,而count代表有效元素的数量。
7. 在第36-43行中,使用冒泡排序对sdata数组进行排序,这种排序方法非常低效,时间复杂度为O(n^2),需要考虑使用更高效的排序算法。
阅读全文