C++中为二维指针动态分配内存的完整示例

山间有风
山间有风
发布时间:2026-10-15| 4人浏览过
原创

在C++开发中,处理变长或大型二维数据时,常需使用二级指针进行动态内存管理。核心难点在于正确分配每一行的独立空间,并确保在程序结束前按相反顺序释放内存以防止泄漏。本文提供一段完整的标准示例代码,涵盖从初始化、赋值、输出到彻底清理的全过程。

二维指针内存分配原理

C++中的二维指针 int **p 本质上是一个指向指针的指针。为了模拟二维数组的行为,我们需要先分配一个包含 N 个 int* 类型元素的数组,随后为这 N 个指针分别分配包含 M 个 int 元素的数组。这种“锯齿状”或离散块式的分配方式使得每行的大小可以不同,但通常为了逻辑清晰,会分配成矩形结构。

完整实现步骤

第1步:定义常量与声明指针

首先定义行数 N 和列数 M,声明主指针 p 用于接收首地址,以及循环变量 i、j。

第2步:分配外层指针数组

使用 new int* [N] 分配存放指针的数组。此时 p 指向这块内存的首地址,但其中的每个指针元素(p[0] 到 p[N-1])都是未初始化的野指针,必须逐个处理。

第3步:分配内层实际数据区

遍历外层的每一个指针 p[i],使用 new int [M] 为其分配存储整型数据的连续内存块。至此,p[i][j] 的访问路径已完全打通。

第4步:数据填充与验证

通过双重循环向内存中写入数据。代码中演示了两种访问方式:
1. 标准的下标访问:p[i][j]
2. 纯指针运算访问:*(*(p + i) + j)
两者结果应一致,可用于验证指针操作的准确性。

第5步:规范释放内存

这是最易出错且导致内存泄漏的关键环节。释放顺序必须与分配顺序严格相反:
1. 先遍历释放每一行的小数组:delete [] p[i];
2. 将行指针置空:p[i] = NULL;
3. 最后释放外层指针数组本身:delete [] p;
4. 将主指针置空:p = NULL;

参考代码

#include <iostream>
using namespace std;

#define N 5
#define M 10

int main(int argc, char **argv)
{
	int **p;
	int i,j;

	// 1. 分配外层指针数组
	p = new int* [N];
	
	// 2. 为每个指针分配内层数据数组
	for (i = 0; i < N; i++)
		p[i] = new int [M];

	// 3. 填充数据
	for (i = 0; i < N; i++)
		for (j = 0; j < M; j++)
			p[i][j] = i + j;

	// 4. 输出验证
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < M; j++)
		{
			cout<<"["<<p[i][j]<<"]"<<" ";
			cout<<*(*(p + i) + j)<<" "<<endl;
		}
		cout<<endl;
	}

	// 5. 释放内存(注意逆序)
	for (i = 0; i < N; i++)
	{
		delete [] p[i];
		p[i] = NULL;
	}
	delete [] p;
	p = NULL;

	return 0;
}

以上就是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 算法库。