c++用new申请的数组在进行A[k++]操作时为什么会出错?

using namespace std;

void func(int R[],int len,int p)
{
    int *temp = new int[len];   //若这里用int temp[10]则正确
    int k = 0;
    for (int i = p; i < len; i++)
    {
        temp[k++] = R[i];  //若这里改成temp[k],把k++单独提出来也是正确的
    }
    for (int i = 0; i < p; i++)
    {
        temp[k++] = R[i];
    }
    memcpy(R, temp, sizeof(temp));
}
int main()
{
    int R[10] = { 1,2,3,4,5,6,7,8,9,10 };
    func(R, 10, 4);
    for (auto i : R)
    {
        cout << i << " ";
    }
    system("pause");
    return 0;
}

希望大佬们帮忙解答一下,感谢!!!

不知道你程序要做什么
func(R, 10, 4);
因此
 int *temp = new int[len]; 
 这里len是10,temp长度10
 for (int i = p; i < len; i++)
    {
        temp[k++] = R[i];  //若这里改成temp[k],把k++单独提出来也是正确的
    }
此后,k=10
    for (int i = 0; i < p; i++)
    {
        temp[k++] = R[i];
    }
这个循环,k已经越界了。

函数void func(int R[],int len,int p):
请将
memcpy(R, temp, sizeof(temp));
改为
memcpy(R, temp, len* sizeof(int));
其中sizeof(temp)获得的是int*的字节大小。如果这样定义int temp[10],那么sizeof(temp)获得的是数组的字节大小。
以上。