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
相关产品推荐
相关产品推荐

