【问题标题】:Merge Sort failing at deletion (Thread 1: EXC_BAD_ACCESS code 2 )合并排序在删除时失败(线程 1:EXC_BAD_ACCESS 代码 2)
【发布时间】:2022-12-03 06:55:52
【问题描述】:

我知道我应该使用向量,但我想在动态分配数组方面做得更好。我不确定哪里出错了。我正在创建一个新数组并将其删除。

void Merge(int *arr,int begin, int mid, int end){

    int*arrB = new int[mid - begin + 1];
    int i = begin;
    int j = mid+1;
    int k = 0;
    
    
    
    while(i <= mid && j <= end){
        if(arr[i] <= arr[j]){
            arrB[k] = arr[i];
            k++;
            i++;
        }
        else {
            arrB[k] = arr[j];
            k++;
            j++;
        }

    }
    
    while(i <= mid){
        arrB[k] = arr[i];
        i++;
        k++;
    }
    while(j <= end){
        arrB[k] = arr[j];
        j++;
        k++;
    }
    
    k = 0;
    for(int i = begin; i <= end; i++){
        arr[i] = arrB[k];
        s.setData(arr);
        k++;
    }
    
    
        delete[] arrB; //error here
}

我试过将 n-1 的 <= 替换为 <,我试过切换到矢量,这也给了我一个错误。我也试过看类似的问题。

【问题讨论】:

    标签: c++ mergesort xcode14


    【解决方案1】:
    void Merge(int *arr, int begin, int mid, int end) {
      // Allocate the arrB array on the stack instead of the heap
      int arrB[mid - begin + 1];
    
    
    
     int i = begin;
      int j = mid+1;
      int k = 0;
    
    
    
     // Initialize the k variable to 0 before using it to index arrB
      k = 0;
    
    
    
     while (i <= mid && j <= end) {
        if (arr[i] <= arr[j]) {
          arrB[k] = arr[i];
          i++;
        } else {
          arrB[k] = arr[j];
          j++;
        }
    
    
    
       // Increment the k variable after each element is added to arrB
        k++;
      }
    
    
    
     while (i <= mid) {
        arrB[k] = arr[i];
        i++;
        k++;
      }
      while (j <= end) {
        arrB[k] = arr[j];
        j++;
        k++;
      }
    
    
    
     // Call the setData method once, outside of the for loop
      s.setData(arr);
    
    
    
     k = 0;
      for (int i = begin; i <= end; i++) {
        arr[i] = arrB[k];
        k++;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 2015-10-07
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多