C++动态内存分配与二维数组指针实现详解

木白
木白
发布时间:2026-10-14| 3人浏览过
原创

在C++编程中,动态内存分配允许开发者在运行时根据需要灵活调整数据的大小,这对于处理未知长度的输入或大规模数据至关重要。本文将演示如何利用 new 和 delete 关键字自定义内存块的类型与长度,并通过一维数组初始化及二维数组索引位移的示例,深入理解指针与内存布局的关系。

结果与目标

本示例旨在解决以下问题:

  • 如何在编译期确定不了大小的情况下申请连续内存?
  • 如何通过一维内存块仿真二维矩阵的访问?
  • 如何正确释放动态分配的内存以避免泄漏?

准备条件

环境要求:

  1. 标准 C++ 编译器(支持 C++98 及以上版本)。
  2. 包含头文件 <iostream> 用于标准输入输出。
  3. 理解基本指针概念及 new[] / delete[] 的配对使用规则。

第1步:动态申请一维数组并赋值

目的:根据用户输入的数值,动态开辟相应容量的整型数组。

入口:控制台命令行交互。

动作说明: 1. 定义整型变量 size 接收用户输入的数组长度。
2. 使用 int *arr_Point = new int[size]; 在堆区分配内存。
3. 通过循环与指针运算 *(arr_Point+i) 读取并存储数据。
4. 再次循环打印验证数据完整性。
5. 执行 delete [] arr_Point; 释放内存。

代码实现

#include <iostream>
using namespace std;

int main()
{   
    int size = 0;
    cout << "请输入数组长度:";  
    cin >> size;
    int *arr_Point = new int[size];

    cout << "指定元素值:" << endl;
    for(int i = 0; i < size; i++)
    {   
        cout << "arr[" << i << "] = ";
        cin >> *(arr_Point+i);
    }

    cout << "显示元素值:" << endl;
    for(int i = 0; i < size; i++)
    {   
        cout << "arr[" << i << "] = " << *(arr_Point+i)
             << endl;
    }

    delete [] arr_Point;
    return 0;
}

完成状态判断

当程序运行后,依次提示输入长度及各位置的值,随后准确回显所有存入的元素,且无内存报错,即表示动态申请成功。

执行结果示例

请输入数组长度:5
指定元素值:
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
显示元素值:
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

第2步:使用指针仿真二维数组

目的:利用连续的一维内存空间,通过数学位移计算模拟二维矩阵的行与列访问。

入口:控制台命令行交互。

动作说明: 1. 输入二维数组的两个维度 m(行)和 n(列)。
2. 申请总长度为 m*n 的一维数组:int *ptr = new int[m*n];。
3. 填充数据时,将二维坐标 (i, j) 转换为一维索引 i*n + j,即 *(ptr + n*i + j) = ...。
4. 输出时同理,遍历 i 从 0 到 m-1,j 从 0 到 n-1。
5. 最后统一释放指针 delete [] ptr;。

代码实现

#include <iostream>
using namespace std;

int main()
{   
    int m = 0;
    int n = 0;

    cout << "输入二维数组维度:";
    cin >> m >> n;

    int *ptr = new int[m*n];

    for(int i = 0; i < m; i++)
    {   
        for(int j = 0; j < n; j++)
        {   
            *(ptr + n*i + j) = i+j;
        }
    }

    for(int i = 0; i < m; i++)
    {   
        for(int j = 0; j < n; j++)
        {   
            cout << *(ptr+n*i+j) << "\t";
        }
        cout << endl;
    }

    delete [] ptr;
    return 0;
}

注意事项

  • 索引计算:核心在于理解 ptr + n*i + j。由于是一维连续内存,每增加一行 i,偏移量需增加一整行的长度 n。
  • 资源管理:务必成对使用 new [] 和 delete []。如果只申请了数组,使用单个对象的 delete 会导致未定义行为。

简要总结

C++ 的动态内存机制赋予了程序极高的灵活性,但也要求开发者严格负责内存的生命周期。上述示例展示了最基础的栈外内存操作模式。在实际大型项目中,建议优先使用 std::vector 等容器类来自动管理内存,但在底层驱动、高性能计算或理解语言本质时,掌握原始指针与 new/delete 的操作依然是必要的技能。

以上就是C++动态内存空间申请及自定义大小实现的详细内容,更多关于C++内存管理与指针操作资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。