正在插入动态数组
Inserting into dynamic array
我正在尝试插入一个动态数组。除了第一次插入外,一切似乎都正常。
这是我的插入函数:
void account::insert(value_type entry) {
if (numberOfItems == 0) {
data = new value_type[numberOfItems + 1];
}
data[numberOfItems] = entry;
numberOfItems++;
value_type* temp = new value_type[numberOfItems + 1];
for (size_t i = 0; i < numberOfItems; i++) {
temp[i] = data[i];
}
delete[] data;
data = temp;
}
这就是我的插件:
void account::deposit(double deposit) {
balance += deposit;
insert(balance);
}
这是我的测试:
account savings(3.00);
savings.deposit(1.00);
cout << savings << endl;
savings.advanceDay(7);
cout << savings << endl;
savings.deposit(450.55);
cout << savings << endl;
savings.advanceDay(23);
cout << savings << endl;
savings.advanceDay(65);
cout << savings << endl;
//Deposit more
savings.deposit(1000);
cout << savings << endl;
savings.advanceDay(65);
cout << savings << endl;
这是我得到的输出:
Account Tester
day: 1, balance: $-6277438562204192487878988888393020692503707483087375482269988814848.00
day: 8, balance: $-6277438562204192487878988888393020692503707483087375482269988814848.00
day: 8, balance: $451.55
day: 31, balance: $451.55
day: 96, balance: $451.55
day: 96, balance: $451.55
day: 161, balance: $1451.55
day: 161, balance: $1451.55
day: 161, balance: $1451.55
day: 161, balance: $1451.55
day: 161, balance: $1451.55
day: 191, balance: $11401.55
day: 221, balance: $11401.55
我很困惑为什么第一笔余额是一个垃圾地址值(或者至少我认为是这样(,而不是1美元,但所有其他存款都是正确的。
此函数
void account::insert(value_type entry) {
if (numberOfItems == 0) {
data = new value_type[numberOfItems + 1];
}
data[numberOfItems] = entry;
numberOfItems++;
value_type* temp = new value_type[numberOfItems + 1];
for (size_t i = 0; i < numberOfItems; i++) {
temp[i] = data[i];
}
delete[] data;
data = temp;
}
有一个错误。当numberOfItems等于0时,您正在分配一个具有一个元素的数组
if (numberOfItems == 0) {
data = new value_type[numberOfItems + 1];
}
data[numberOfItems] = entry;
numberOfItems++;
那么您正在增加项目数量。再说一遍,您正在分配一个数组,但现在有2个元素。
value_type* temp = new value_type[numberOfItems + 1];
并且作为结果,该阵列具有具有不确定值的元素。
将函数分离为两个分配内存的代码段是没有意义的。
最初,数据成员数据应等于nullptr。该功能可以看起来像
void account::insert( const value_type &entry )
{
value_type* temp = new value_type[numberOfItems + 1];
for ( size_t i = 0; i < numberOfItems; i++ )
{
temp[i] = data[i];
}
temp[numberOfItems++] = entry;
delete [] data;
data = temp
}
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结