在C ++中,无法取消引用由memset()引起的向量迭代器**向量**

时间:2014-01-16 23:23:04

标签: c++ pointers vector iterator

我有一个指向结构的向量。

std::vector<REVOCATION_LIST_BLOCK*> rl_block;

结构在标题中定义......

struct REVOCATION_LIST_BLOCK
{
    int                    number_of_entries;
    REVOCATION_LIST_ENTRY *entries;
    SIGDATA                signature;
};

稍后,向量添加了一个条目,如下所示:

REVOCATION_LIST_BLOCK *new_rl_block = new REVOCATION_LIST_BLOCK;
new_rl_block->number_of_entries = 6;
rl_block.push_back(new_rl_block);

稍后,我想访问rl_block中的数据:

std::vector<REVOCATION_LIST_BLOCK*>::iterator it;
it = rl_block.begin();
number = (*it)->number_of_entries;

但是这让我得到了'ol断言:

vector iterator not dereferencable

但请注意,我 能够执行此操作,并按预期获得值“6”:

REVOCATION_LIST_BLOCK *block = rl_block[0];
number = block->number_of_entries_in_this_signature_block;

迭代器方式我缺少什么?

修改

感谢大家的评论。 rl_block是另一个结构的一部分(此代码使用一组复杂的嵌套结构)。如果我在另一个结构中写了一些没有rl_block的测试代码,那么一切都按预期工作。

结果,我将rl_block定义修改为:

std::vector<REVOCATION_LIST_BLOCK*> *rl_block;

然后动态分配向量本身。这有效。但为什么呢?

进一步深入研究,我发现了一个问题---一个包含内容的糟糕memset()来清理内存。这适用于P.O.D.,但当然不适用于矢量。

0 个答案:

没有答案