上的內存損壞(快)錯誤所以我一直在使用合併排序方法,它使用泛型類型作爲輸入並對它們進行排序。我收到一個我不明白的錯誤。因爲我使用泛型類型並需要對20 kk記錄進行排序,所以我必須使用malloc函數來分配用於實現合併排序的數組,因此需要在不需要時立即釋放它們以避免填滿我所有的記憶。下面是代碼(我只會把相關代碼段):C,免費()
代碼
void merge(void ** A, int a, void ** B, int b, void ** C , CompFunction compare)
{
int i,j,k;
i=0;
j=0;
k=0;
while(i < a && j < b){
if((compare(A[i],B[j])<0)){
C[k++] = A[i++];
}
else{
C[k++] = B[j++];
}
}
while(i < a){
C[k++] = A[i++];
}
while(j < b){
C[k++] = B[j++];
}
}
void merge_sort(void** A, int n, CompFunction compare)
{
int i;
void ** A1;
void ** A2;
int n1,n2;
if(n < 2)return;
n1 = n/2;
n2 = n - n1;
A1 = malloc(sizeof(sizeof(void*))*n1);
A2 = malloc(sizeof(sizeof(void*))*n2);
printf("i:%d\n",i);
for(i = 0 ; i < n2 ; i++){
A1[i] = A[i];
}
for(i = 0 ; i < n2 ; i++){
A2[i] = A[i+n1];
}
merge_sort(A1, n1, compare);
merge_sort(A2 ,n2, compare);
merge(A1, n1, A2, n2, A, compare);
free(A1);
free(A2);
}
你會看到我在打電話的功能參數的比較功能。這只是一種比較各種類型的數據以確定哪個更大或更小的功能。 我試圖刪除free()和錯誤不再顯示,但代碼永遠不會結束運行,因爲它填滿了硬盤上的所有內存和交換區域。 我得到的錯誤是這樣的:
錯誤
*** Error in `./exeInt': malloc(): memory corruption
(fast):0x00000000006dffa0 ***
如果有人能幫助我,我會深深appreaciate它。
聞起來像一個錯誤。 –
請顯示[MCVE]。 –
for A [1]必須運行到n1 –