我是C初學者,並有內存分配問題。我查看了相關的討論。我應該使用Valgrind,但直到我學習如何使用它,我在這裏發佈問題。使用malloc C中的錯誤:malloc.c:2451:sYSMALLOc「斷言失敗」
以下是我製作的合併排序代碼的鏈接。 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」錯誤。
幫助將不勝感激。
爲什麼我需要使主int?我沒有主要返回任何東西。 – Mallika
問題是,當我在兩半上調用MergeSort時,我不在任何地方存儲排序後的半部分。如果我創建了兩個單獨的數組並將它們合併,那將不會被正確調用嗎?我將如何實施就地排序? – Mallika
我做了A = MergeSort(A,x,half); A = MergeSort(A,half + 1,y); 我仍然收到錯誤。例如1 2的輸入給了我1 1; 4 3 2 1給我4 4 4 2。 – Mallika