我是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“ Assertion Failed”错误。
帮助将不胜感激。
你的问题
void main()
到
int main()
,
int k=half;
到
int k=half+1;
,
while((j<=half)||(k<=y))
到
while((j<=half)&&(k<=y))
,
return C;
到
for(i=0;i<size;++i){
A[x+i]=C[i];
}
free(C);
return A;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句