【问题标题】:c++ segmentation fault when dereferencing a pointer to a vector of structures取消引用指向结构向量的指针时出现c ++分段错误
【发布时间】:2017-09-20 07:27:30
【问题描述】:

所以我正在为一个类创建一个封闭散列哈希表,并且我有一个结构

struct Example {
  string key;
  string data;

  Example() { key = "000"; }
};

还有一个类,它包含一个指向结构向量的成员、一个构造函数和一个我将用来说明问题的函数。

class hash_table {
  private:
  vector<Example>* hash;

  public:
  hash_table(int size);
  void dummy_method();
 };

这意味着根据用户/文件输入动态分配向量中的结构数。

hash_table :: hash_table ( int size=10 )
{
  //initialize vector 
  vector<Example> * hash = new vector<Example>(size);
  //test objects
  for(int i=0;i<size;i++)
    cout<<(*hash)[i].key<<endl;
}

上面的代码似乎初始化了 10 个成员,因为它打印出“000” 十次。

但是,一旦我通过调用 dummy_method- 尝试此操作-

void hash_table::dummy_method() { 
  cout<<(*hash)[0].key<<endl;
} 

我遇到了分段错误

我很确定这甚至不是正确的方法,但我一直在寻找/修补,但似乎找不到解决方案。但是,我绝对必须使用指向结构向量的指针,而且我很确定我也应该动态分配每个结构(不知何故)。感谢您的帮助。

(另外,是的,我们实际上必须使用命名空间,因此任何地方都没有 std)

【问题讨论】:

  • 你应该存储一个向量,而不是一个指向向量的指针。这将减少错误的范围。
  • 什么是htable,它是如何定义的?请发布一个完整的示例代码来重现您所询问的问题。否则很难给出有用的答案。
  • 对不起,htable 来自更大的程序。我将较大程序中的函数复制到较小的程序中以隔离问题。我对其进行了编辑以反映正确的代码。截至目前,这是一个已完成的程序,因此应隔离任何问题。

标签: c++ pointers vector hashtable


【解决方案1】:

vector&lt;Example&gt; * hash = new vector&lt;Example&gt;(size); 表达式将初始化一个名为 hash 的局部变量,而不是 hash_table::hash 成员(未初始化)。

【讨论】:

  • 非常感谢您澄清这一点。你知道是否有一种简单的方法来动态初始化 hash_table::hash 成员并用动态分配的结构填充它?对不起,如果这是一个愚蠢的问题,我的大脑有点因为试图弄清楚这一切而融化。
  • 您只需删除vector&lt;Example&gt; * 部分,甚至将其重写为this-&gt;hash 以明确表明您正在处理类成员。像这样的名字冲突在 C++ 中是相当麻烦的,你可能想使用一些命名约定来防止这种情况,比如成员变量以m_ 开头,常规变量总是用小写字母写,函数总是用 CamelCase 写,类型名以t_,命名空间以n_开头。
  • 我知道当有人回答我并没有错的那一刻我会感到难以置信的愚蠢。我非常感谢您的帮助。
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 2011-07-13
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多