Mixture (merge sort): Dynamic allocation problem, Sy
-
Objective: To achieve mergers (cursions).
Test 1 shows that the code is compiled with C99 without warning and meets formal criteria.
And test 2 makes a mistake of dynamic allocation:
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] FAILEDI hope that's right.
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; }
-
int* array = malloc(sizeof(int) * argc);
- here you're putting a mass of three whole numbers.int len = read_array_from_file(array, atoi(argv[1]), filename);
- and here you seem to read more than three.int *arrayB = (int *)malloc(sizeof(int));
- There's only one whole in here, too.