C++ C++;使用动态数组时的合并排序问题

C++ C++;使用动态数组时的合并排序问题,c++,mergesort,dynamic-arrays,C++,Mergesort,Dynamic Arrays,我试图实现一个合并排序函数,但合并部分有问题。因为最初我不知道数组的大小,所以我创建了一个临时动态数组来存储最终合并的数组。当我运行这个方法时,我得到一个堆损坏错误。当我将动态数组大小更改为(last+1)时,该方法运行时不会出错。我不知道为什么会出现问题,因为最终数组中的元素数必须是last-first+1 我的合并功能 void merge(int arr[], int first, int mid, int last) { int* temp = new int[last - fi

我试图实现一个合并排序函数,但合并部分有问题。因为最初我不知道数组的大小,所以我创建了一个临时动态数组来存储最终合并的数组。当我运行这个方法时,我得到一个堆损坏错误。当我将动态数组大小更改为(last+1)时,该方法运行时不会出错。我不知道为什么会出现问题,因为最终数组中的元素数必须是last-first+1

我的合并功能

void merge(int arr[], int first, int mid, int last) {
    int* temp = new int[last - first + 1];

    int first1 = first;
    int last1 = mid;
    int first2 = mid + 1;
    int last2 = last;
    int i = first1;

    while (first1 <= last1 && first2 <= last2) {
        if (arr[first1] < arr[first2]) {
            temp[i] = arr[first1];
            first1++;
        }
        else {
            temp[i] = arr[first2];
            first2++;
        }
        i++;
    }
    
    while (first1 <= last1) {
        temp[i] = arr[first1];
        first1++;
        i++;
    }

    while (first2 <= last2) {
        temp[i] = arr[first2];
        first2++;
        i++;
    }
    
    for (int k = first; k <= last; k++) {
        arr[k] = temp[k];
    }

    delete[] temp;
}
void合并(int arr[],int first,int mid,int last){
int*temp=newint[last-first+1];
int first1=第一;
int last1=mid;
int first2=中间+1;
int last2=最后;
int i=第一个1;

而(first1初始化
i
,作为
temp
first1
的索引,是不好的,因为
temp
只有
first
last
之间的元素

i
应初始化为零,循环

    for (int k = first; k <= last; k++) {
        arr[k] = temp[k];
    }

for(int k=first;k)如果您忘记了first/mid/last的概念,只需使用(a)指针算法来调整段的基址,以及(b),这会容易得多一个简单的mid/len,表示所讨论段的中点和长度。它需要更改mergesort算法,但此后合并变得很简单。它允许您实现
mergesort(int*arr,size\u t len)
(没有第一个、最后一个;只有一个len).非常感谢.我甚至都没想到会有这个问题。
    for (int k = first; k <= last; k++) {
        arr[k] = temp[k - first];
    }