写了一个简单的归并排序,产生了警告C6386写入 "temp" 时缓冲区溢出和警告C6001使用未初始化的内存“*temp”。
void merge(int* arr, const int& left, const int& mid, const int& right)
{
int i = left;
int j = mid + 1;
const int len = (right - left) + 1;
int* temp = new int[len];
int k = 0;
while (i <= mid && j <= right)
temp[k++] = arr[i] < arr[j] ? arr[i++] : arr[j++];
while (i <= mid)
temp[k++] = arr[i++];
while (j <= right)
temp[k++] = arr[j++];//缓冲区溢出?
for (int i = 0; i < len; ++i)
arr[left + i] = temp[i];//未初始化内存?
delete[]temp;
}
void mergeSort(int* arr, const int& left, const int& right)
{
if (left == right)
return;
int mid = (left + right) >> 1;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
void MergeSort::sort(int* arr, const int& len)
{
cout << "归并排序" << endl;
mergeSort(arr, 0, len - 1);
}
找了半天没发现警告的原因,经过测试程序是能正常运行的。