63、用new动态创建一维数组

本文解释了栈和堆在内存分配上的区别,介绍了如何使用C++动态创建和释放一维数组,强调了sizeof和delete[]的适用性,以及避免野指针的重要性。
摘要由CSDN通过智能技术生成

普通数组在栈上分配内存,栈很小;如果需要存放更多的元素,必须在堆上分配内存。

动态创建一维数组的语法:数据类型 *指针=new 数据类型[数组长度];

释放一维数组的语法:delete [] 指针;

注意:

  1. 动态创建的数组没有数组名,不能用sizeof运算符。
  2. 可以用数组表示法和指针表示法两种方式使用动态创建的数组。
  3. 必须使用delete[]来释放动态数组的内存(不能只用delete)。
  4. 不要用delete[]来释放不是new[]分配的内存。
  5. 不要用delete[]释放同一个内存块两次(否则等同于操作野指针)。
  6. 对空指针用delete[]是安全的(释放内存后,应该把指针置空nullptr)。
  7. 声明普通数组的时候,数组长度可以用变量,相当于在栈上动态创建数组,并且不需要释放。
  8. 如果内存不足,调用new会产生异常,导致程序中止;如果在new关键字后面加(std::nothrow)选项,则返回nullptr,不会产生异常。
  9. 为什么用delete[]释放数组的时候,不需要指定数组的大小?因为系统会自动跟踪已分配数组的内存。

     

示例:

#include <iostream>

int main() {
    // 指定数组长度
    int length = 10;

    // 动态创建一维数组
    int *array = new int[length];

    // 使用数组
    for (int i = 0; i < length; ++i) {
        array[i] = i * i;
        std::cout << "array[" << i << "] = " << array[i] << std::endl;
    }

    // 释放一维数组
    delete[] array;

    // 将指针置为nullptr,避免野指针
    array = nullptr;

    return 0;
}

这段代码中,我们首先动态创建了一个整型数组 array,长度为 length。通过循环初始化数组,并打印每个元素的值。使用完成后,通过 delete[] 语句释放数组占用的内存,并将指针设置为 nullptr,以避免野指针问题。

这里没有使用 sizeof 运算符来获取动态数组的大小,因为动态数组的大小在运行时是未知的,且 sizeof 仅能返回指针变量的大小,而不是它所指向的内存区域的大小。数组的释放也不需要指定数组的大小,因为系统会跟踪动态分配的内存大小。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值