首页 > 解决方案 > 超出范围会自动删除动态数组内存分配吗?

问题描述

#include<iostream>

using namespace std;

int main()
{
    int *numbers, sum = 0, input, size = 0;
    const int CHUNK = 3;
    int capacity = CHUNK;

    numbers = new int[capacity];

    cout << "Enter the number(negative number to end): ";
    cin >> input;

    while(input >= 0)
    {
        if(size >= capacity)
        {
            capacity += CHUNK;
            int *temp = new int[capacity];
            for(int i = 0; i < size; i++)
            {
                temp[i] = numbers[i];
            }
            delete [] numbers;
            numbers = temp;

            cout << "Expanding by " << CHUNK << endl;

        }
        numbers[size] = input;
        size++;
        cin >> input;
    }

    cout << "\nYou entered: ";
    for(int i = 0; i < size; i++)
    {
        cout << numbers[i] << " ";
    }
    delete [] numbers;

    return 0;
}

考虑上面的代码,这是一个可调整大小数组的示例。它不断从用户那里获取输入,并以 3 的增量相应地扩展数组。

在“if”语句中,我动态地将内存分配给数组“temp”

int *temp = new int[capacity];

我知道必须删除temp 才能释放内存。但是,我只是不知道在哪里写它,因为如果我确实在if语句的范围内写它,那么它最终会打印出一堆奇怪的数字。但是,没有它也可以正常工作。或者当动态数组超出范围时内存是否会自动释放?

标签: c++

解决方案


有一种更好的方法来制作可调整大小的数组:使用 std::vector。而且您的代码不是异常安全的。使用适当开发的组件(例如,来自标准库的组件)不仅可以加快代码的创建速度,使理解其逻辑的时间更短、更简单,而且还没有错误。


推荐阅读