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] FAILED

    I 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&lt;=middle &amp;&amp; m &lt;=end){
                if(array[k]&lt;=array[m]){            
                    arrayB[i] = array[k];
                    k++;
                }
                else{
                    arrayB[i] = array[m];
                    m++;
                }
                i++;
            }
            while(k&lt;=middle){
                arrayB[i] = array[m];
                k++;
                i++;
            }
            while(m&lt;= end){
                arrayB[i] = array[m];
                m++;
                i++;
            }
            int j = 1;
            while(j&lt;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 &lt; 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.




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2