首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 二維動態數組創建過程詳細解析

     編輯:程式設計綜合問答

代碼片段

int m, n;
cin >> m >> n;
int **p = NULL;
p = new int *[m];          // 步驟 1
for (int i = 0; i < m; i++) // 步驟 2
    p[i] = new int[n];     // 步驟 3

逐步內存圖解

  1. int **p = NULL;
    定義一個指向指針的指針 p,初始化為空。此時 p 本身佔用 8 字節(64 位系統),指向無效地址。
  2. p = new int *[m];
    在堆上分配一個包含 m 個 int* 元素的指針數組。p 指向這個數組的首地址。每個元素初始化為未定義值(野指針)。
  3. for 循環:p[i] = new int[n];
    依次為指針數組的每個元素分配一個包含 n 個 int 的整型數組。完成後形成「指針數組 → 多個整型數組」的二級結構,邏輯上等價於 m 行 n 列 的二維數組。

內存佈局示意

p ────→ [指針0] → [int, int, ..., int] (n個)
        [指針1] → [int, int, ..., int]
        ...
        [指針m-1] → [int, int, ..., int]

釋放內存(必須逆序)

for (int i = 0; i < m; i++)
    delete[] p[i];  // 先釋放每行
delete[] p;         // 再釋放指針數組
p = nullptr;

現代 C++ 替代方案

建議使用 std::vector<std::vector<int>> 或 std::unique_ptr 管理生命週期,避免手動內存管理錯誤:

vector<vector<int>> matrix(m, vector<int>(n));
// 自動釋放,支援邊界檢查
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved