c语言赋值语句出现问题。使用变量名right的值不对

问题遇到的现象和发生背景

编个递归排序调用函数的时候一步步调试,发现right的值不对

问题相关代码,请勿粘贴截图
#include <stdio.h>

int merge(int a[], int L, int mid, int R)
{
  int help[R - L + 1];
  int i = 0;
  int left = L;
  int right = mid + 1;//出现问题的地方!!!!!
  int test = 0;
  // for (; i < (R - L + 1) && left <= mid && right <= R; i++)
  // {
  //   if (a[left] < a[right])
  //   {
  //     help[i] = a[left];
  //     left++;
  //   }
  //   else
  //   {
  //     help[i] = a[right];
  //     right++;
  //   }
  // }
  // while (left <= mid)
  // {
  //   help[i++] = a[left++];
  // }
  // while (right <= R)
  // {
  //   help[i++] = a[right++];
  // }
  // for (int x = 0; x < (R - L + 1); x++)
  // {
  //   a[x] = help[x];
  // }
  return 0;
}

int process(int a[], int L, int R)
{
  if (L < R)
  {
    int mid = L + ((R - L) >> 1);
    process(a, L, mid);
    process(a, mid + 1, R);
    merge(a, L, mid, R);
    return 0;
  }
  else
    return 0;
}

int main()
{
  int n = 10;
  int i, j;
  int a[10] = {5, 44, 3, 54, 6, 76, 2, 3432, 5, 54};
  process(a, 0, 3);
  for (int x = 0; x < n; x++)
  {
    printf("  %d   ", a[x]);
  }
  printf("\n");
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

只要用right就会出现问题为什么?

我想要达到的结果

你的问题是为啥mid是0而right值是2吗?
因为你这调试模式,监控变量窗口中的表达式是可以修改程序中的变量的。你的监视窗口中的“a[right++]”把right原来的值1变成了2。.
另外你的排序,我也没看见有交换元素位置的操作呀