【问题标题】:dereferencing through a vector error通过向量错误解除引用
【发布时间】:2015-01-05 16:38:42
【问题描述】:

对于我的构造函数,我输入了一个整数向量,并在构造函数中设置了另一个 bool 类型的向量,称为 theSet。从输入向量中,我检查每个元素是否在 0 到 20 之间,如果为真则 theSet 的元素为真。

但是,我在实现取消引用 theSet 向量时遇到了问题。

class Set
{
public:
    Set(vector<int> &);
    bool IsMember(int);

private:
    vector<bool> theSet;

}

bool Set::IsMember(int x)
{
    if ((x >= 0) && (x <= 20))
        return true;
    else
        return false; 
}


Set::Set(vector<int> &v)
{
    int length = v.size();
    theSet.reserve(length);

    bool check;

    int p = 0;
    for (int i = 0; i < length; i++)
    {
        theSet[i] = IsMember(v[i]);
    }
}

【问题讨论】:

  • 你有什么问题?
  • @Radiodef 我刚刚复制/粘贴了他的代码,msvcr 出现了一个调试断言错误,声称vector&lt;bool&gt; iterator not dereferencable 在执行theSet[i] = IsMember(v[i]) 时。
  • @PuerNoctis 请注意,OP 应该告诉我们这个问题。因为我认为他们已经尝试编译它。
  • 一目了然,您可能会被烧毁,因为不幸的是vector&lt;bool&gt; 不是一个充满bool 类型的vector,它是一个不能正常工作的专业化。欲了解更多信息,请阅读此gotw.ca/publications/mill09.htm

标签: c++ vector pass-by-reference dereference


【解决方案1】:

使用theSet.resize() 而不是theSet.reserve(),它可能会起作用。请尝试。使用reserve(),您只是为插入预先分配内存,但内存本身是未初始化的,分别。还没有真正的元素。当您尝试修改循环中的值时,您将请求对位置 i 的值的引用,但没有可以修改的元素,因此出现错误。

【讨论】:

  • 向量下标超出范围
猜你喜欢
  • 2017-03-14
  • 2021-04-22
  • 2014-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多