请问:free释放指针为什么会出错

leetow2006 2017-12-05 07:48:48
我的运行环境是: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掉吗,怎么会出现错误呢?
怎么解决?
...全文
407 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2006 2017-12-05
  • 打赏
  • 举报
回复
是 int *temp =(int*) malloc(len * sizeof(int)); 这里要这样才可以,谢谢。
paschen 2017-12-05
  • 打赏
  • 举报
回复
应该是访问堆内在越界了,导致堆破坏,从而在释放时出错
FoolCarpe 2017-12-05
  • 打赏
  • 举报
回复
n2是什么?
 printf("%d  %d\n",n1,n2);	
malloc大小错误
 int *temp =(int*) malloc(len * sizeof(int));
heronism 2017-12-05
  • 打赏
  • 举报
回复
看代码貌似没错,除非temp的值为空,或被踩,但这种情况应该在前面就出错。未见得是free的错误,你把temp换到栈空间(使用局部变量temp[64])看一下,如果还出错就不是指针释放的问题,可能栈空间溢出。建议你把宕机时的调用栈信息贴出来。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧