C ++中的向量初始化

时间:2012-04-28 21:17:58

标签: c++ stl vector declaration stdvector

我在我的代码中使用向量。

导致错误的行如下:

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,如下所示:

vector<Node> alt_seq(1000) ;

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

以下是完整的方法功能供您参考:

http://pastebin.com/2dUFEui5

2 个答案:

答案 0 :(得分:3)

您的Node类有一个名为CombinedFragment*的{​​{1}}类型的指针成员。如果您没有定义自己的复制ctor和赋值运算符,则会创建悬空引用。此外,如果cfrag负责分配/解除分配Node,则需要正确的dtor来防止泄漏。如果您不想深度复制cfrag,可以使用CombinedFragment

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

答案 1 :(得分:0)

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