C++ 指针 : stack for an array was corrupted

标签 c++ pointers

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

int a[5] = {1,2,3,4,5}

其中 size =5,对于 shift = 2 结果必须是

{3,4,5,1,2}

这是我的功能

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;
    }
}

输出是正确的,但是有运行时异常

Stack around the variable 'a' was corrupted

问题肯定在

a[size - 1] = l;

但是我不明白,到底哪里出了问题。
预先感谢您的帮助。

最佳答案

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

所以 a[-1]a[3] 现在是有效索引的范围:a[size - 1]违反了这一点。

我建议不要以这种方式更改 a

关于C++ 指针 : stack for an array was corrupted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367696/

相关文章:

c++ - C++中使用指针的数组中元素的数量

c - 当无法更改数组的地址时,strcpy() 如何将字符串复制到数组?

int 指针可以转换为 char * 吗?

c++ - 在 Qt 问题中检测屏幕旋转

c++ - QTextStream 和 Visual Studio 2008 Release模式

c++ - 错误 : X does not name a type

关于指针大小的混淆

c++ - 在 VC++ 中查找函数体时出错

c++ - 具有可选所有权的智能指针

c - 指针问题和困惑