请问:free释放指针为什么会出错
我的运行环境是:CentOS 64,是在虚拟机上运行。
请看我的程序(是归并排序)
#include <stdio.h>
#include <stdlib.h>
void Merge(int A[], int left, int mid, int right)
{
int len = right - left + 1;
int *temp =(int*) malloc(len);
int index = 0;
int i = left;
int j = mid + 1;
int k;
while (i <= mid && j <= right)
{
temp[index++] = A[i] <= A[j] ? A[i++] : A[j++];
}
while (i <= mid)
{
temp[index++] = A[i++];
}
while (j <= right)
{
temp[index++] = A[j++];
}
for (k = 0; k < len; k++)
{
A[left++] = temp[k];
}
free(temp); //加入这句会出错
}
void MergeSortRecursion(int A[], int left, int right)
{
if ( (right-left)<1)
return;
int mid = (left + right) / 2;
MergeSortRecursion(A, left, mid);
MergeSortRecursion(A, mid + 1, right);
Merge(A, left, mid, right);
}
int main()
{
int i;
int A1[] = { 9,6, 5, 12,3, 1, 8, 7, 2, 4 };
int n1 = sizeof(A1) / sizeof(int);
printf("%d %d\n",n1,n2);
MergeSortRecursion(A1, 0, n1 - 1);
printf("first sort:\t");
for ( i = 0; i < n1; i++)
{
printf("%d ", A1[i]);
}
printf("\n");
return 0;
}
在merge函数中,我free掉temp指针,系统会出现Abort(core dump)错误。
如果我一开始int *tmp;tmp=temp;最后free掉tmp指针,仍然还是出现相同的
错误。请问不是说malloc一个指针,最后要free掉吗,怎么会出现错误呢?
怎么解决?