STL的vector的push_back后为什么会出错呢。里面有现象代码:
以下代码为什么会出错呢:
#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




