上的内存损坏(快)错误所以我一直在使用合并排序方法,它使用泛型类型作为输入并对它们进行排序。我收到一个我不明白的错误。因为我使用泛型类型并需要对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 –