vector 指针类型元素的释放

做项目的时候刚开始接触到stl的vector。其中用vector类型管理指针类型的元素。

Code:
  1. #include "stdafx.h"   
  2. #include <stdlib.h>   
  3. #include <stdio.h>   
  4. #include <iostream>   
  5.   
  6. #include <vector>   
  7. //   
  8. //初始化    
  9. bool init_Vec(std::vector<char *> &vecTest,unsigned int nElem)   
  10. {   
  11.  //判断初始时是否为空   
  12.  char i=0;   
  13.  char* ch="i will be success!";   
  14.  if (!vecTest.empty())   
  15.  {//初始不为空 清空   
  16.         std::vector<char *>::iterator iter=vecTest.begin();   
  17.   for (;iter<vecTest.end();iter++)   
  18.   {   
  19.    char *nc=*iter;   
  20.    delete nc;   
  21.   }   
  22.   vecTest.clear();   
  23.  }   
  24.  if (0==nElem)   
  25.  {   
  26.         goto init_Vec_end;   
  27.  }   
  28.  //初始化   
  29.    for (i=0;i<(char)nElem;i++)   
  30.    {   
  31.     char* pchar=new char;   
  32.     //申请成功   
  33.     if (pchar)   
  34.     {   
  35.      pchar=&ch[i];   
  36.         vecTest.push_back(pchar);   
  37.     }   
  38.     else  
  39.     {   
  40.          delete pchar;   
  41.    goto init_Vec_break;   
  42.     }     
  43.    }   
  44.    //正常初始化完成   
  45.    return true;   
  46. init_Vec_break:   
  47.     //初始化失败 释放已有资源   
  48.    {   
  49.     std::vector<char *>::iterator iter=vecTest.begin();   
  50.     for (;iter<vecTest.end();iter++)   
  51.     {   
  52.      char *nc=*iter;   
  53.      delete nc;   
  54.     }   
  55.     vecTest.clear();   
  56.    }   
  57. init_Vec_end:   
  58.    return false;   
  59. }   
  60. //   
  61. //打印   
  62. void Printf_Value(std::vector<char *> vecTest)   
  63. {   
  64.     std::vector<char *>::iterator iter=vecTest.begin();   
  65.  for(;iter!=vecTest.end();iter++)   
  66.  {   
  67.         char *nc=*iter;   
  68.   printf("%c,%d /n",*nc,*nc);   
  69.  }   
  70. }   
  71.   
  72. //   
  73. //释放资源   
  74. void Clear_vec(std::vector<char *> vecTest)   
  75. {   
  76.     if (!vecTest.empty())   
  77.  {   
  78.         std::vector<char *>::iterator iter=vecTest.begin();   
  79.   for (;iter<vecTest.end();iter++)   
  80.   {   
  81.    char* nc=*iter;   
  82.    delete nc;   
  83.   }   
  84.   vecTest.clear();   
  85.  }   
  86. }   
  87.   
  88. int main(int argc, char* argv[])   
  89. {   
  90.  //声明变量   
  91.  std::vector<char *> m_vecTest;   
  92.  if (!init_Vec(m_vecTest,15))   
  93.  {   
  94.   printf("{ init_Vec }  failed! /n");   
  95.   goto End_Main;   
  96.  }   
  97.     
  98.  Printf_Value(m_vecTest);   
  99.  Clear_vec(m_vecTest);   
  100. End_Main:   
  101.  printf("Hello World!/n");   
  102.  return 0;   
  103. }   
  104.   

//在 vc 6.0 中编译通过 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值