corrupted size vs. prev size munmap_chunk(): invalid pointer
来源:2-7 更多关于O(n^2)排序算法的思考

不是谁都叫QB
2019-01-14
老师您好:
我按照视频的要求自己去实现了Shell排序算法,如下方代码所示。
template<typename T>
void shellSort(T arr[], int n) {
for (int d = n / 2; d > 0; d /= 2) {
for (int i = 0; i < d; i++) { //i 增量分组的起始下标
//插入排序法
for (int j = i + d; j < n; j += d) { //j + d 最大不会超过n
int z = j;
T temp = arr[j];
for (; z > 0 && arr[z - d] > temp; z -= d) {
arr[z] = arr[z - d];
}
arr[z] = temp;
}
}
}
}
为了测试该算法的性能我模仿您使用 SortTestHelper 帮助类来测试自己写的代码。
int main() {
/*int a[4] = {4, 3, 1, 2};
shellSort(a, 4);
for (int i : a)
cout << i << " ";*/
int n = 20000;
// 测试1 一般测试
cout<<"Test for random array, size = "<<n<<", randome range [0, "<<n<<"]"<<endl;
int *arr1 = SortTestHelper::generateRandomArray(n,0,n);
int *arr2 = SortTestHelper::copyIntArray(arr1, n);
int *arr3 = SortTestHelper::copyIntArray(arr1, n);
SortTestHelper::testSort("Selection Sort", selectionSort, arr1, n);
SortTestHelper::testSort("Insertion Sort", insertionSort, arr2, n);
SortTestHelper::testSort("Shell Sort", shellSort, arr3, n);
delete[] arr1;
delete[] arr2;
delete[] arr3;
cout<<endl;
}
但是我一运行就会爆出以下的错误
我自己试着自己测了一下
int a[4] = {4, 3, 1, 2};
shellSort(a, 4);
for (int i : a)
cout << i << " ";
排序算法是可以进行排序的,但是一旦调用了SortTestHelper 它就会爆出以下的错误,而且经常都是
munmap_chunk(): invalid pointer 与 corrupted size vs. prev size 这两种错误重复交替。我不知道自己错在哪里希望老师能指教一下。
写回答
1回答
-
liuyubobobo
2019-01-15
我在课程的官方代码仓也提供了Shell排序的参考代码。同时也是使用SortTestHelper进行的测试。
我测试了一下,将我的shellSort完全替换成你的shellSort在我的环境下是没有问题的。所以跟我的代码检查比对一下SortTestHelper中相关的函数是否有问题?(generateRandomArray,copyIntArray,testSort,等等)。
加油!:)
00
相似问题
size优化的意义
回答 1
近似有序,归并一直比双路快排快很多
回答 1