【发布时间】:2014-02-21 19:38:31
【问题描述】:
我是 C 的初学者,遇到内存分配问题。我检查了相关的讨论。我可能应该使用 Valgrind,但在我学会如何使用它之前,我会在这里发布问题。
这是我制作的合并排序代码的链接。 http://ideone.com/utEzoq
但是,主要问题似乎在以下部分:
void main()
{
MergeSort(list, 0, n-1) //calling function on pointer to array of integers
}
int *MergeSort(int *A, int x, int y) //declaration
{
if(x==y)
{
return A;
}
else
{
int size=1+y-x;
int half=(x+y)/2;
MergeSort(A, x, half);
MergeSort(A, half+1, y);
int *C;
C=(int *)malloc(size*sizeof(int));
int j=x;
int k=half;
int i=0;
while((j<=half)||(k<=y))
{
if(A[j]<=A[k])
{
C[i]=A[j];
j++;
}
else
{
C[i]=A[k];
k++;
}
i++;
}
if(j==(half+1))
{
while(i<size)
{
C[i]=A[k];
i++;
k++;
}
}
else if(k==(y+1))
{
while(i<size)
{
C[i]=A[j];
i++;
j++;
}
}
return C;
}
然而,不同类型的输入会出现错误。当我输入一个反向排序和排序的数组时,它会按照输入的顺序返回输出。随机数给出 malloc“断言失败”错误。
我们将不胜感激。
【问题讨论】: