C++ malloc():循环中损坏的顶部大小

C++ malloc(): corrupted top size on loop

我正在尝试创建一个打印动态大小数组的函数 printarr。但是,每当我尝试 运行 代码时,我都会收到上面的错误。我也尝试复制我在网上找到的代码,但得到了同样的错误,所以我想知道我的安装是否有问题,或者代码的另一部分以某种方式影响了它。整个事情看起来超级简单,这让我更加难过。这是代码:

#include <iostream>
using namespace std;
//Generates an array with k inversions of size n
int* generate_k_inversion(int k, int n){
  int *arr=new int(n);
  //Check if number of inversions is possible
    if(k>(n*(n-1)/2)){
    cout<<"Impossible number of inversions!";
    throw(-1);
  }
  //Loop to generate points
  for(int i=0;i < n;i++){
    arr[i]=i;
  }
  //Loop to invert
  return arr;
}
//Copies dynamic arrays of size n
int* copy(int* arr1,int n){
  int* arr2=new int(n);
  for(int i=0;i<n;i++){
    arr2[i]=arr1[i];
  }
  return(arr2);
}
//Generates output of best and worst cases of bubble and insertion sort in integers of size n
void test1(int n){
  //generate best case
  int *arrb1=generate_k_inversion(0,n);
  int *arrb2=copy(arrb2,n);
  delete [] arrb1;
  delete [] arrb2;
  //generate worst case
  int *arrw1=generate_k_inversion((n*(n-1)/2),n);
  int *arrw2=copy(arrw2,n);
  delete [] arrw1;
  delete [] arrw2;
}
//Prints a dynamic array arr of size n
void printarr(int* arr, int n)
{
   for (int i = 0; i < n; i++)
   {
      cout << arr[i] << "  ";
   }
}
//Just initialize both tests
int main(){
int size=10;
int* arr1=generate_k_inversion(0,size);
printarr(arr1,size);
delete [] arr1;
}

感谢帮助

int *arr=new int(n);

将为单个 int 分配内存并将 int 初始化为 n

因此,循环

for(int i=0;i < n;i++){
    arr[i]=i;
}

将越界访问 arr,导致未定义的行为。

你可能想要的是写

int *arr=new int[n];

相反,它将为 n 类型 int 的值分配内存。