я написал этот код на языке C на Xcode, следуя алгоритму сортировки слиянием.Проблема в том, что иногда я получаю EXC_BAD_ACCESS и не могу понять, где ошибка!Алгоритм слияния должен работать (я попробовал это вне функции слияния и работает!).Спасибо за вашу помощь и терпение!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 6
void mymerge (int v[], int i1,int i2, int last); //mergesort core: merge two ordinated arrays in one bigger ordinated array
void mymergesort (int v[], int lower, int upper);//mergesort
void printv (int v[],int lower, int upper);
int main () {
int i;
srand((unsigned int)time(NULL));
int v[DIM];
for (i=0; i<DIM; i++)
v[i]=rand()%15;
printv(v, 0, DIM-1);
getc(stdin);
mymergesort(v, 0, DIM-1);
printv(v, 0, DIM-1);
}
void printv (int v[],int lower, int upper){
int i;
for (i=lower; i<=upper; i++)
printf("%d\t",v[i]);
}
void mymergesort (int v[], int lower, int upper){
int mid=(upper+lower)/2;
if (upper<lower) {
mymergesort(v, lower, mid);
mymergesort(v, mid+1, upper);
mymerge(v,lower,mid+1,upper);
}
}
void mymerge (int v[], int i1,int i2, int last){
int i=i1,j=i2,k=i1,*vout;
vout=(int*)malloc((last-i1+1)*sizeof(int));
while (i<i2 && j<=last) {
if (v[i]<=v[j]) {
vout[k++]=v[i++];
}else {
vout[k++]=v[j++];
}
}
for (;i<i2;i++) vout[k++]=v[i];
for (;j<=last;j++) vout[k++]=v[j];
for (k=i1; k<=last; k++) v[k]=vout[k];
free(vout);
}
РЕДАКТИРОВАТЬ: большое спасибо!но я думаю, что есть другая проблема, когда я пытаюсь отсортировать массив большего размера (200 элементов), программа не работает (я получаю ошибку malloc: неверная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения).Но если я запускаю его из отладчика xCode, все работает нормально