我想用下一个代码解决的问题是将某个大小的整数数组旋转到某个数字移位。 例如,对于
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/