Mergesort条件跳转错误

时间:2014-11-07 08:50:01

标签: c valgrind mergesort

我无法追踪"条件跳转或移动取决于未初始化的值"我写的一些mergesort代码中的valgrind错误。代码对事情进行了适当的排序,但我知道存在来自未初始化的变量的内存泄漏。 Valgrind告诉我它在我的代码的m_sort部分,但我不确定什么没有被初始化。

void merge(int *C, int *A, int n, int *B, int m) {
    int i, j, k;
    for (i=0,j=0,k=0; k<(n+m); k++) {
        if (i==n) {
            C[k] = B[j];
            j++;
        }
        else if (j==m) {
            C[k] = A[i];
            i++;
        }
        else {
              if (A[i] < B[j]) {
                 C[k] = A[i];
                 i++;
          }
              else {
                 C[k] = B[j];
                 j++;
          }
       }
    }
}

void m_sort(int *A, int *B, int left, int right) {
    int mid;
    if (right >left) {
        mid =((right + left)/2);
        m_sort(B, A, left, mid);
        m_sort(B, A, mid+1, right);
        merge(A+left, B+left, mid-left+1, B+mid+1, right-mid);
    }
}

void merge_sort(int *a, int left, int right)
{
    int * T = NULL;
  int i;
    T = (int*)malloc((right+1)*sizeof(int));

    for (i=0; i<right; i++) 
    {
        T[i] = a[i];
    }
    m_sort(a,T,left,right);
  free(T);
}

0 个答案:

没有答案