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
的值分配内存。
我正在尝试创建一个打印动态大小数组的函数 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
的值分配内存。