c++ - 插入动态数组

标签 c++ memory-management dynamic-arrays

我正在尝试插入动态数组。除了第一次插入,一切似乎都正常。

这是我的插入函数:

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
}

关于c++ - 插入动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365497/

相关文章:

java - java中的参照物是什么?

c++ - 具有链式动态分配的删除运算符

php - 取消设置对象数组是只取消设置数组还是取消所有对象?

arrays - 动态数组作为 Delphi 7 中的可选参数

c++ - 使用 ImageMagick++ 捕获 X11 屏幕截图

C++ 专用模板继承自非专用版本

c++ - 奇怪的赋值——匿名函数调用?

c++ - 在 OS X 上的 OpenGL 上下文之间共享数据(不同版本/配置文件)

python - 如果大小增加,为什么 python 列表的位置没有改变?

c - 在 C 中调整数组大小