我正在尝试插入动态数组。除了第一次插入外,其他所有内容似乎都正常运行。
这是我的插入函数:
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
我很困惑为什么fisrt余额是一个垃圾地址值(或者至少是我认为的那个)而不是$ 1,但其他所有depostits都是正确的。
此功能
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++;
然后您正在增加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
}