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

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

c++

2个回答

不知道你程序要做什么
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已经越界了。
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复橙味美年达: 数组越界,可能出错,也可能不出错。好比你闯红灯,可能会出车祸,可能没事。
大约一年之前 回复
Arvi_
橙味美年达 区别仅仅是我申请数组的方式不同,结果却不一样。如果我用new动态申请数组,把k++写在外面,也是可以得到正确结果的。逻辑没有变,但是为什么换个申请内存的方式结果就不一样了呢
大约一年之前 回复
Arvi_
橙味美年达 这个程序是把数组后面部位挪到前面,前面挪到后面。第一个for循环i从4到9,k=6,下一个for循环i从0到3,k这时候才是10,没有越界啊。我如果用int temp[10]来申请数组,结果就是正确的
大约一年之前 回复

函数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)获得的是数组的字节大小。
以上。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问