You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++存储string的二维动态数组实现及动态内存释放相关问题

C++ string类型二维动态数组实现及内存问题解答

一、最简单的实现方案

你的需求是行数动态、每行固定3个string类型元素,优先推荐用STL容器实现,无需手动管理内存,代码量最少也最不容易出错:

#include <vector>
#include <array>
#include <string>

// 定义:外层vector行数动态,内层array固定为3个string元素
std::vector<std::array<std::string, 3>> account_list;

常用操作示例

// 新增1条账号数据,行数自动+1
std::array<std::string, 3> new_account = {"user123", "pwd456", "2024-01-01"};
account_list.push_back(new_account);

// 读取元素:下标从0开始,取第0行第1列的密码
std::string password = account_list[0][1];

// 获取当前账号总数(数组行数)
int rows = account_list.size();

如果你需要和之前教程一致的双指针手动实现,只需要把原来的int类型替换为string即可:

#include <string>

// 初始化2行3列的二维动态数组
std::string** account_arr = new std::string*[2];
for (int i = 0; i < 2; i++) {
    account_arr[i] = new std::string[3];
}

// 赋值操作
account_arr[0][0] = "user123";
account_arr[0][1] = "pwd456";
account_arr[0][2] = "2024-01-01";

二、内存相关问题解答

  • 为什么用完动态数组需要执行delete操作?

C++中通过new关键字申请的内存属于堆内存,这部分内存的生命周期不受函数作用域限制,不会随代码块运行结束自动释放。如果不主动调用delete释放,会产生内存泄漏:对应内存会一直被程序占用无法被其他程序使用,长期运行的程序内存泄漏累积到一定程度会导致系统可用内存不足,最终程序崩溃。

  • 执行delete后存储的元素是不是就被删除了?

是的。调用delete[]释放数组时,会先依次调用每个string元素的析构函数,释放字符串本身占用的内存,之后会把整个数组占用的堆内存交还给操作系统,这块内存的内容就不再合法,后续再访问会触发未定义行为。

  • 关闭控制台程序会不会影响实际内存?

不管你有没有主动执行delete操作,控制台程序关闭(进程退出)时,操作系统会自动回收该进程占用的所有内存资源,不会一直占用系统的物理内存。但仍建议养成主动释放动态内存的习惯,避免开发长时间运行的后端服务、常驻程序时出现内存泄漏问题。


内容的提问来源于stack exchange,提问作者Meilianto Luffenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:06:02