CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

STL的vector的push_back后为什么会出错呢。里面有现象代码:

楼主lailu(zb)2006-07-03 18:21:30 在 C/C++ / 工具平台和程序库 提问

以下代码为什么会出错呢:  
  #include   "stdafx.h"  
  #include   <vector>  
  #include   "iostream.h"  
  using   namespace   std;  
   
  typedef   struct   _TEST  
  {  
  int   k;  
  }TEST,*PTEST;  
   
  typedef   struct   _B  
  {  
  PTEST   pTest;  
   
  _B()  
  {  
  pTest   =   0;  
  }  
  ~_B()  
  {  
  if(0   !=   pTest)  
  {  
  delete   pTest;  
  printf("free   once");  
  }  
  }  
  }B,*PB;  
   
  int   main(int   argc,   char*   argv[])  
  {  
  vector<B>   vB;  
  B   b1,b2;  
  vB.push_back(b1);  
   
  B   &TemB   =   vB.front();           //这两步对vector有什么影响?应该没影响啊,但去掉就ok了  
  TemB.pTest   =   new   TEST();           //  
   
  vB.push_back(b2);  
   
   
  return   0;  
  } 问题点数:100、回复次数:8Top

1 楼UPCC(杂食动物)回复于 2006-07-03 18:56:52 得分 100

问题在这里  
  ~_B()  
  {  
  if(0   !=   pTest)  
  {  
  delete   pTest;  
  printf("free   once");  
  }  
  //////////////  
  你把b1删除了Top

2 楼UPCC(杂食动物)回复于 2006-07-03 18:59:10 得分 0

问题在这里  
  ~_B()  
  {  
  if(0   !=   pTest)  
  {  
  delete   pTest;  
  printf("free   once");  
  }  
  //////////////  
  你把b1删除了,但vB没有做相应处理,当对vB进行插入时,vB这个链表有个iterator的指针要连接,但空间不在了(大概这样吧)Top

3 楼UPCC(杂食动物)回复于 2006-07-03 19:00:45 得分 0

不好意思看错了。sorry!!!!!!!!!!!111  
  我上面的说法是错误的Top

4 楼UPCC(杂食动物)回复于 2006-07-03 19:20:06 得分 0

楼上,我检测的结果是:  
  问题在这里  
  ~_B()  
  {  
  if(0   !=   pTest)  
  {  
  delete   pTest;  
  printf("free   once");  
  }  
  //////////////  
  你把b1把删除了两次  
  但具体是怎样的还在检测Top

5 楼UPCC(杂食动物)回复于 2006-07-03 19:22:03 得分 0

呵呵,问题是  
  B   &TemB   =   vB.front();  
  ---------------------  
  应该改为  
  B   TemB   =   vB.front();Top

6 楼lailu(zb)回复于 2006-07-03 23:50:10 得分 0

那样似乎无法改变我想改变的值,  
  关键就是改变值的那一步与push_back(b2)屏蔽任何一个都没有问题,,难道不能再改变值了吗?Top

7 楼crazy_lazy_pig(疯狂懒猪)回复于 2006-07-04 00:23:00 得分 0

是什么错误啊?  
   
  我用gcc编译毫无问题.Top

8 楼crazy_lazy_pig(疯狂懒猪)回复于 2006-07-04 00:28:06 得分 0

我把   B   &TemB   =   vB.front();   改成:  
  B*   TemB   =   &vB.front();  
  或者  
  vector<B>::iterator   TemB   =   vB.begin();  
   
  后面的TemB.pTest相应的改为   TemB->pTest   也都没问题.  
   
  是不是VC对STL的支持问题啊?Top

相关问题

关键词

得分解答快速导航

  • 帖主:lailu
  • UPCC

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo