map的erase()释放内存

简介: STL中的map调用erase(it),当value值为指针时,释放内存: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 struct value{ 7 int i; 8 ...

STL中的map调用erase(it),当value值为指针时,释放内存:

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 
 5 using  namespace std;
 6 struct value{
 7     int i;
 8     std::string test;
 9 };
10 
11 int main()
12 {
13     std::map<int, value*> test_map;
14     for(int i=0; i<10; ++i){
15         value* tmp = new value();
16         tmp->i = i;
17         tmp->test = "test";
18         test_map.insert(make_pair(i, tmp));
19     }   
20 
21     for(std::map<int, value*>::iterator it=test_map.begin(); it!=test_map.end();){
22         std::cout << "first " << it->first << " second " << (it->second)->i <<" "<< (it->second)->test << std::endl;
23         delete it->second;
24         it->second = NULL;
25         //test_map.erase(it);     //迭代器失效;
26         test_map.erase(it++);   //防止迭代器失效,切记、切记
27     }   
28 
29     return 0;
30 }
31 
32 root@u18:~/cp/test# g++ map3.cpp  -g -Wall
33 root@u18:~/cp/test# ls -lt a.out
34 -rwxr-xr-x 1 root root 87224 Jul  9 11:00 a.out
35 root@u18:~/cp/test# valgrind  --tool=memcheck  --leak-check=full ./a.out
36 ==28426== Memcheck, a memory error detector
37 ==28426== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
38 ==28426== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
39 ==28426== Command: ./a.out
40 ==28426== 
41 first 0 second 0 test
42 first 1 second 1 test
43 first 2 second 2 test
44 first 3 second 3 test
45 first 4 second 4 test
46 first 5 second 5 test
47 first 6 second 6 test
48 first 7 second 7 test
49 first 8 second 8 test
50 first 9 second 9 test
51 ==28426== 
52 ==28426== HEAP SUMMARY:
53 ==28426==     in use at exit: 0 bytes in 0 blocks
54 ==28426==   total heap usage: 30 allocs, 30 frees, 930 bytes allocated
55 ==28426== 
56 ==28426== All heap blocks were freed -- no leaks are possible
57 ==28426== 
58 ==28426== For counts of detected and suppressed errors, rerun with: -v
59 ==28426== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

 

相关文章
|
3月前
|
存储 JavaScript 算法
|
6月前
|
Java
SpringBoot 项目启动初始化一个Map对象到内存
SpringBoot 项目启动初始化一个Map对象到内存
149 1
|
存储 Go
当map在不提前分配内存的时候为什么会抛异常?
当map在不提前分配内存的时候为什么会抛异常?
|
存储 程序员 编译器
STM32的内存管理相关(内存架构,内存管理,map文件分析)
STM32 的内存架构,内存管理以及 map 文件分析
357 0
STM32的内存管理相关(内存架构,内存管理,map文件分析)
|
Java 分布式计算 Hadoop
|
存储 SQL 关系型数据库
sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
  序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进jdbc内部原理,将数据写入磁盘存储了。
1827 0
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
385 0
|
29天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
60 1
|
1月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
1月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。