为什么c++插入一个垃圾到数组?

我编写了一个函数来按索引将元素插入数组,这是函数:

bool insertByindex(int array[], int size, int index, int element) {
  if (index > size || index < 0) {
    cout <<"Invalid position!";
    return false;
  } else {
    for (int i = size; i > index; i--) {
      array[i] = array[i - 1];
    }
    array[index]= element;
    return true;
  }
}

int main() {
  int arr[] = {1, 2, 3, 5};
  int size = sizeof(arr) / sizeof(arr[0]);
    
  // calling the function
  insertByindex(arr, size, 3, 4);

  // print the array
  cout << size << "--> ";
  for (int i = 0 ; i < size ; i++) {
     cout << arr[i] << " ";
  }
  cout << "n";

  // calling the function again
  insertByindex(arr, size, 4, 7);

  // print the array
  cout << size << "--> ";
  for (int i = 0 ; i < size ; i++) {
        cout << arr[i]<< " ";
  }
  return 0;
}

第一次工作正常,但第二次时,它会在末尾插入一个垃圾元素并增加数组的大小。为什么会发生这种情况?这是输出(第一个数字是数组的大小,----> 之后的数字是数组的项目):

5--> 1 2 3 4 5 
7--> 1 2 3 4 7 5 5 

为什么第二次数组的大小是 7(不是 6),最后的 5 是多少?

回答

这是罪魁祸首:

for(int i=size; i>index;i--){
            array[i]=array[i-1];

第一次迭代i是数组的大小,所以你分配数组的末尾!

它调用 Undefined Behavior 并且不好的事情开始发生......这里的实现可能将size变量放在数组之后并且你已经覆盖了它。

始终控制两次,以免在数组上发生越界访问...


作为用于阵列O大小较高折射率的sizesize - 1只写:

for(int i=size-1; i>index;i--){
            array[i]=array[i-1];
...

和函数应该控制indexstricly小于size

if(index >= size || index < 0){
    cout <<"Invalid position!";
    return false;
}


以上是为什么c++插入一个垃圾到数组?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>