我无法追踪"条件跳转或移动取决于未初始化的值"我写的一些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);
}