Задача: реализовать сортировку слиянием (рекурсия).
Тест 1 выдаёт, что код компилируется с С99 без предупреждений и отвечает формальным критериям.
А тест 2 выдаёт ошибку динамической аллокации:
2015-12-17T22:44:11.883304922Z [ INFO] TEST 2: Check Calls: Recursion and dynamic memory 2015-12-17T22:44:11.889112824Z [ INFO] ----------------------------------------------------------------------- [INFO] Check: Recursion [INFO] Check: (c|m)allocs [ERROR] No malloc or calloc found! [INFO] TERMINATION TIME: > Thu Dec 17 23:44:11 CET 2015 2015-12-17T22:44:11.955008007Z
[INFO] > RESULT: FAILED
Надеюсь, вопрос оформляю верно.
int main (int argc, char *argv[]){
if (argc!=3){
printf ("usage: %s <maximale anzahl> <dateipfad>\n", argv[0]);
exit(2);
}
char *filename = argv[2];
int* array = malloc(sizeof(int) * argc);
/* С int* array = (int*)malloc(sizeof(int)*atoi(argv[1])); та же ошибка */
int len = read_array_from_file(array, atoi(argv[1]), filename);
printf("Eingabe:\n");
print_array(array, len);
merge_sort(array, 0, len);
printf("Sortiert:\n");
print_array(array, len);
free(array);
return 0;
}
void merge(int* array, int start, int middle, int end){
int *arrayB = (int*)malloc(sizeof(int));
/* та же ошибка с int *arrayB = (int *)malloc(sizeof(end-start+1)); или int *arrayB = (int*)malloc(sizeof(int)); */
int k = start;
int m = middle +1;
int i = 1;
while(k<=middle && m <=end){
if(array[k]<=array[m]){
arrayB[i] = array[k];
k++;
}
else{
arrayB[i] = array[m];
m++;
}
i++;
}
while(k<=middle){
arrayB[i] = array[m];
k++;
i++;
}
while(m<= end){
arrayB[i] = array[m];
m++;
i++;
}
int j = 1;
while(j<i){
array[start+j-1] = arrayB[j];
j++;
}
free(arrayB);
}
void merge_sort(int* array, int first, int last){
int middle = (last + first)/2;
if (first < last){
merge_sort(array, first, middle );
merge_sort(array, middle+1, last);
merge(array, first, middle, last);
}
return;
}
Свежие комментарии