c++ - 超出范围会自动删除动态数组内存分配吗?
问题描述
#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语句的范围内写它,那么它最终会打印出一堆奇怪的数字。但是,没有它也可以正常工作。或者当动态数组超出范围时内存是否会自动释放?
解决方案
有一种更好的方法来制作可调整大小的数组:使用 std::vector。而且您的代码不是异常安全的。使用适当开发的组件(例如,来自标准库的组件)不仅可以加快代码的创建速度,使理解其逻辑的时间更短、更简单,而且还没有错误。
推荐阅读
- swift - 是否可以使用 SwiftUI 将键盘上的“返回”键更改为“完成”?
- c# - 用重复的代码重构静态类c#
- python - 合并排序算法中的中断递归
- json - 是否可以在 JSON 中制作自定义对象键?
- python - 基于共享密钥组合数据帧
- r - 使用 ggeffect() 修复效果
- c# - 如何重置 Membership.ApplicationName
- google-signin - 将谷歌登录集成到静态 html
- node.js - 使用promises递归列出目录中的所有文件而不使用fs.promises api
- sql - DBeaver 不接受 MYSQL 函数。我怎样才能使这项工作?