1

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

导致错误的行如下:

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

4

2 回答 2

3

您的Node类有一个CombinedFragment*名为cfrag. 如果您没有定义自己的复制 ctor 和赋值运算符,这将创建悬空引用。Node此外,如果负责分配/解除分配,则需要适当的 dtor 来防止泄漏cfrag。如果您不想深度复制CombinedFragment,可以使用shared_ptr.

此外,默认的 ctorNode可能甚至不需要在那里(它cfrag处于未初始化状态)。

于 2012-04-28T21:31:30.907 回答
0

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

于 2012-04-29T02:22:16.347 回答