0
我正在嘗試讀取包含隨機數列表的文本文件,並使用mergesort對其進行排序以顯示。數字被讀入到一個動態數組中。不幸的是,每當我嘗試刪除未使用的數組時,都會檢測到堆損壞錯誤。刪除數組時發生堆損壞錯誤
歸併功能:在發生合併功能
void mergesort(int *arr, int first, int last)
{
if(first < last)
{
int middle = ((first + last)/2);
mergesort(arr, first, middle);
mergesort(arr, middle+1, last);
merge(arr, first, last);
}
}
錯誤,當我刪除tempArr:
void merge(int *arr, int first, int last)
{
int *tempArr = new int[last];
int mid = (first+last)/2;
int first1 = first;
int last1 = mid;
int first2 = mid + 1;
int last2 = last;
int index = first1;
for(; (first1 <= last1) && (first2 <= last2); ++index)
{
if (arr[first1] < arr[first2])
{
tempArr[index] = arr[first1];
++first1;
}
else
{
tempArr[index] = arr[first2];
++first2;
}
}
for(; first1 <= last1; ++first1, ++index)
tempArr[index] = arr[first1];
for(; first2 <= last2; ++first2, ++index)
tempArr[index] = arr[first2];
for(index=first;index<=last;++index)
arr[index] = tempArr[index];
delete [] tempArr;
}
除了使用'new','delete'和流,我不會稱之爲C++。使用引用而不是指針來傳遞參數「引用」,並使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)而不是原始數組。 – 2013-02-19 10:23:46
至於你的問題,在調試器中運行它,然後逐行執行代碼,同時確保不覆蓋數組的末尾。 – 2013-02-19 10:24:30
注意'(first + last)/ 2'可以溢出 - 'first +(last - first)/ 2'比較安全。 – molbdnilo 2013-02-19 10:30:16