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进行的测试。

传送门:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/02-Sorting-Basic/Course%20Code%20(C%2B%2B)/Optional-03-Shell-Sort/main.cpp


我测试了一下,将我的shellSort完全替换成你的shellSort在我的环境下是没有问题的。所以跟我的代码检查比对一下SortTestHelper中相关的函数是否有问题?(generateRandomArray,copyIntArray,testSort,等等)。


加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11211 学习 · 1617 问题

查看课程