归并排序C语言实现,跟严蔚敏数据结构书上的代码差不多,报错 40

#include<stdio.h>#include<stdlib.h>#include<memory.h>voidmerge(ints[],intT[],inti,int... #include<stdio.h>
#include<stdlib.h>
#include<memory.h>
void merge(int s[], int T[], int i, int m, int n);
void MSort(int SR[], int T1[], int s, int t);
int main()
{

int a[4] = { 5, 3,4,1};

int T[4];

MSort(a, T, 0, 3);

int i;
for (i = 0; i <4; i++)
printf("%d ", T[i]);

return 0;
}

void merge(int s[],int T[], int i, int m, int n)
{
int j, k;

for (j = m + 1, k = i; i <= m&&j <= n; k++)
{
if (s[i] < s[j])
T[k] = s[i++];
else
T[k] = s[j++];

}

if (i <= m)
memcpy(&T[k], &s[i], (m - i + 1)*sizeof(int));
if (j<=n)
memcpy(&T[k], &s[j], (n-j + 1)*sizeof(int ));
}

void MSort(int SR[], int T1[], int s, int t)
{
if (s == t)
T1[s] = SR[s];
else
{
int* T2 = (int *)malloc((t - s + 1)*sizeof(int));
int m = (s + t) / 2;
MSort(SR,T2,s,m);
MSort(SR, T2, m+1, t);
merge(T2, T1, s, m, t);

free(T2);

}

}
报错,wrote to memory after end of heap buffer
展开
 我来答
Steven_12138
2015-10-12
知道答主
回答量:12
采纳率:0%
帮助的人:12.7万
展开全部
你的变量定义和使用不符合C语言规范:所有变量必须先定义后使用。
更改代码如下(只需要修改一下顺序就好):
int T[4];
int i;
MSort(a, T, 0, 3);
亲测编译通过,望采纳!
追问
本来编译就没错·······运行时出错,应是内存泄露
追答
好的,已经找到问题了。是free(T2)出问题了,去掉这一句就可以了。解释如下:
由于你在归并排序中使用了递归的方法,递归函数自我调用,完成后返回调用点,你每次调用后就释放形参指针,导致递归返回无法找到调用点,所以出错了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式