C++指针:数组的堆栈已损坏

riv*_*are 2 c++ pointers

我想用下一个代码解决的问题是将某个大小的整数数组旋转到一定的数字移位.例如,为

int a[5] = {1,2,3,4,5}
Run Code Online (Sandbox Code Playgroud)

在哪里size =5,shift = 2结果必须是

{3,4,5,1,2}
Run Code Online (Sandbox Code Playgroud)

这是我的功能

void rotate(int a[], int size, int shift)
{
    for (int i = 0; i < shift%size; ++i) {
        int *buffer = &a[0];
        a = &a[1];
        int l = *buffer;
        a[size - 1] = l;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出正确,但存在运行时异常

Stack around the variable 'a' was corrupted
Run Code Online (Sandbox Code Playgroud)

问题肯定在于

a[size - 1] = l;
Run Code Online (Sandbox Code Playgroud)

但我无法理解,到底出了什么问题.
在此先感谢您的帮助.

Bat*_*eba 6

a = &a[1];将指针移动a1.

因此a[-1],a[3]包容性现在是有效指数的范围:a[size - 1]违反了这一点.

我建议不要这样改变a.