我有一个指向结构的向量。
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.,但当然不适用于矢量。