数组分配中的 C++ 堆内存只会弄乱第一个数组而不是第二个数组
C++ Heap memory in array assignment only messing up for the first array and not the second
我有一个任务要在名为插入和打印的数组 class 中创建两个函数。 Insert 应该将元素添加到数组的末尾,当我 运行 代码时,我得到的输出对于第二个数组来说看起来不错,但第一个数组给出了奇怪的输出。我真的不知道从这里去哪里,任何指针都有帮助
#include <iostream>
using namespace std;
class Array //The array class
{
private:
//Data members capacity, size, and arr (a pointer that points to the first element of the array in the heap).
int capacity{};
int size{};
int* arr{};
public:
Array(int capacity);//parameter
Array();//default
~Array();//destructor
void insert(int num);
void print() const ;
};
void Array::insert(int num)
{
{
if (size == 0)
{
arr[0] = num;
size++;
return;
}
int index = 0;
while (num > arr[index] && index < size)
{
index++;
}
arr[index] = num;
size++;
}
}
void Array::print() const
{`enter code here`
for (int i = 0; i < size; i++)
{
cout << *(arr+i)<<" ";
}
delete[]arr;
}
Array::Array()
{
return;
}
//Destructor to clean up
Array::~Array()
{
return;
}
//Parameter constructor
Array::Array(int cap)
:capacity(cap)
{
arr = new int[capacity];
size = 0;
}
int main()
{
// Creation of an array with a capacity of 10
Array array1(10);
array1.insert(5);
array1.insert(3);
array1.insert(2);
cout << "Array 1: " << endl;
array1.print();
cout << endl;
// Creation of another array
Array array2(20);
for (int i = 0; i < 20; i++)
{
array2.insert(i + 10);
}
cout << "Array 2: " << endl;
array2.print();
cout << endl;
return 0;
}
您没有在
中初始化分配的数组
arr = new int[capacity];
所以它的内容是垃圾。
然后在您的 insert()
中您尝试按升序插入元素,但您没有向上移动现有元素;你只需覆盖它们。
你的 print
打印出垃圾。
第二个测试用例有效,因为您的元素已经订购,因此无需移动。
我有一个任务要在名为插入和打印的数组 class 中创建两个函数。 Insert 应该将元素添加到数组的末尾,当我 运行 代码时,我得到的输出对于第二个数组来说看起来不错,但第一个数组给出了奇怪的输出。我真的不知道从这里去哪里,任何指针都有帮助
#include <iostream>
using namespace std;
class Array //The array class
{
private:
//Data members capacity, size, and arr (a pointer that points to the first element of the array in the heap).
int capacity{};
int size{};
int* arr{};
public:
Array(int capacity);//parameter
Array();//default
~Array();//destructor
void insert(int num);
void print() const ;
};
void Array::insert(int num)
{
{
if (size == 0)
{
arr[0] = num;
size++;
return;
}
int index = 0;
while (num > arr[index] && index < size)
{
index++;
}
arr[index] = num;
size++;
}
}
void Array::print() const
{`enter code here`
for (int i = 0; i < size; i++)
{
cout << *(arr+i)<<" ";
}
delete[]arr;
}
Array::Array()
{
return;
}
//Destructor to clean up
Array::~Array()
{
return;
}
//Parameter constructor
Array::Array(int cap)
:capacity(cap)
{
arr = new int[capacity];
size = 0;
}
int main()
{
// Creation of an array with a capacity of 10
Array array1(10);
array1.insert(5);
array1.insert(3);
array1.insert(2);
cout << "Array 1: " << endl;
array1.print();
cout << endl;
// Creation of another array
Array array2(20);
for (int i = 0; i < 20; i++)
{
array2.insert(i + 10);
}
cout << "Array 2: " << endl;
array2.print();
cout << endl;
return 0;
}
您没有在
中初始化分配的数组arr = new int[capacity];
所以它的内容是垃圾。
然后在您的 insert()
中您尝试按升序插入元素,但您没有向上移动现有元素;你只需覆盖它们。
你的 print
打印出垃圾。
第二个测试用例有效,因为您的元素已经订购,因此无需移动。