释放内存出错,不知为何?
/*
在mergeSort里申请了临时空间,完后释放出错,不知为何
完整代码如下:请大家对代码规范问题也提出意见,谢谢
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*把value[low-mid]和value[(mid+1)-high]归并排序,结果放在dest里*/
void merge(int dest[], int value[], int low, int mid, int high)
{
int i = mid + 1;
int j = low;
int k = low;
while (i <= high && j <= mid)
{
if (value[i] < value[j])
{
dest[k++] = value[i++];
}
else
{
dest[k++] = value[j++];
}
}
while (i <= high)
{
dest[k++] = value[i++];
}
while (j <= mid)
{
dest[k++] = value[j++];
}
}
/*归并排序函数,temp是排序要用到的临时空间,把values[low-high]之间的数据排序*/
void mergeSortTemp(int values[], int low, int high, int temp[])
{
if (high > low)
{
int mid = (low + high) / 2;
mergeSortTemp(values, low, mid, temp);
mergeSortTemp(values, mid + 1, high, temp);
merge(temp, values, low, mid, high);
memcpy(values + low, temp + low, (high - low) * sizeof(int));
}
}
/*归并排序函数*/
void mergeSort(int values[], int number)
{
int *temp = (int*)malloc(sizeof(int) * number);
mergeSortTemp(values, 1, number, temp);
/*free(temp); */ /*运行到此行时出错,不知道为什么*/
}
int main()
{
int values[] = {0, 1, 3, 5, 2, 4, 6};
int i = 0;
mergeSort(values, 6);
for (i = 1; i <= 6; i++)
{
printf("%d ", values[i]);
}
printf("\n");
return 0;
}