2012-04-28 177 views
1

我在我的代码中使用了Vectors。C++中的向量初始化

,导致该错误的行如下所示:

vector<Node> alt_seq ; 
alt_seq = vector<Node>(1000); 
for(int j=0; j<alt_cf.getNoOfNodes(i); j++) 
{ 
    Node temp_node = *alt_itr; 
    alt_itr++; 
    alt_seq.push_back(temp_node); 
    } 

线:

alt_seq.push_back(temp_node); 

导致运行时错误。但是,如果我初始化一些初始大小的矢量如下:

vector<Node> alt_seq(1000) ; 

在这种情况下代码工作正常。 但是我不想给出初始大小,因为矢量中的对象数量在运行时将是可变的。 请帮帮我。我是新的C++。

供您参考完整的方法函数是在这里:

http://pastebin.com/2dUFEui5

+1

看起来像类节点的三大实现问题。你能告诉我们“节点”的定义吗? – dirkgently 2012-04-28 21:22:27

+1

'vector alt_seq(1000)'将在向量中构造1000个'Node'对象,这与不指定计数不同。你的'push_back'问题听起来像是'Node'的赋值/拷贝构造函数的一个可能的问题。你能展示这个类的声明和定义吗? – birryree 2012-04-28 21:23:07

+0

顺便说一句,pastebin链接也没有类节点的定义。 – dirkgently 2012-04-28 21:25:08

回答

3

Node类有一个名为cfragCombinedFragment*类型的指针成员。如果您未定义自己的副本和赋值运算符,则会创建悬挂引用。另外,如果Node负责分配/解除分配cfrag,则需要合适的分流器来防止泄漏。如果您不想深度复制CombinedFragment,则可以使用shared_ptr

此外,Node的默认ctor可能不需要在那里(它将cfrag保留为未初始化状态)。

+0

谢谢我会尝试...如果你想看项目中的其他课程,代码可以在GitHub https://github.com/abhinavarora/mbt – 2012-04-28 21:33:29

+1

@AbhinavArora:尝试添加合适的大三,并返回,如果没有'解决你的问题! – dirkgently 2012-04-28 21:35:05

+0

正如你所说,我增加了三大如下http://pastebin.com/g2n14awz请让我知道,如果这种补充是正确的。尽管进行了上述更改,但它仍然会导致运行时错误。请帮忙。我无法理解我的错误。 – 2012-04-28 22:02:19

0

我可以看到一个问题;当你声明1000 vector对象,然后做一个push_back你要添加到向量的末尾,即你想添加的对象是在1001,1002 ....等。如果声明1000 vector对象doesn' t给你一个运行时错误,我首先会看到什么是默认定义(因为前1000个节点对象有默认值),因为这没有错误,并与我试图加载的实际数据进行比较。希望这可以帮助。