c语言警告出现C6386 C6385

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

警告出现C6386 C6385
不知道怎么解决这个问题求解各位!

img

void MergeSortNonR(int* a, int n)
{
    int* tmp = (int*)malloc(sizeof(int) * n);
    if (tmp == NULL)
    {
        exit(-1);
    }
    int gap = 1;
    while (gap < n)
    {
        for (int i = 0; i < n; i += 2 * gap)
        {
            int begin1 = i, end1 = i + gap - 1;
            int begin2 = i + gap, end2 = i + 2 * gap - 1;
            int k = begin1;
            if (begin2 >= n)
            {
                break;
            }

            //begin1在0,end1在3,begin2在4,end2在7时修正end2
            if (end2 >= n)
            {
                end2 = n - 1;
            }

            int index = i;
            //一个结束就结束了
            while (begin1 <= end1 && begin2 <= end2)
            {
                //左边小就先放左边
                if (a[begin1] < a[begin2])
                {
                    tmp[index++] = a[begin1++];    //C6386出现位置!!!!!!!!!!!!!!!!
                }
                //右边小就先放右边
                else
                {
                    tmp[index++] = a[begin2++];
                }
            }
            while (begin1 <= end1)
            {
                tmp[index++] = a[begin1++];
            }

            while (begin2 <= end2)
            {
                tmp[index++] = a[begin2++];
            }
            //拷贝回去
            for (int j = k; j <= end2; ++j)
            {
                a[j] = tmp[j];                        //C6385出现位置!!!!!!!!!!!!!!!!
            }
        }
        gap *= 2;
    }
    free(tmp);
}


tmp长度不够。你要考虑一下,tmp到底存储多少个整数,是n个?还是更多?