zoukankan      html  css  js  c++  java
  • map的erase()释放内存

    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)
  • 相关阅读:
    xls与csv文件的区别
    青音,经典爱情语录
    win7用户账户自动登录方法汇总
    How to using Procedure found Lead Blocker
    FTS(3) BSD 库函数手册 遍历文件夹(二)
    FTS(3) BSD 库函数手册 遍历文件夹(一)
    DisplayMetrics类 获取手机显示屏的基本信息 包括尺寸、密度、字体缩放等信息
    About App Distribution 关于应用发布
    FTS(3) 遍历文件夹实例
    OpenCV 2.1.0 with Visual Studio 2008
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4632568.html
Copyright © 2011-2022 走看看