我在头文件中定义了这样的矢量
class entry
{
public:
int key;
int next;
};
std::vector<entry *> TB;
在cpp文件中,我写道:
int s1, val;
s1 = 10; val = 2;
gh = (TB.size() % s1);
但是当我想写一些东西时,我会得到分段错误
TB[gh]->key = val;
作业有什么问题?
答案 0 :(得分:2)
矢量没有元素。使用push_back()
或insert()
向元素添加元素:
entry* e = new entry();
e->key = val;
e->next = 0;
TB.push_back(e); // Append to vector.
TB.insert(TB.begin(), e); // Insert at beginning of the vector.
在销毁向量TB
时,您必须单独迭代元素和delete
(或使用智能指针作为元素类型,例如boost::shared_ptr<entry>
或std::unique_ptr<entry>
)。
您可以为entry
提供一个构造函数,以便更加简洁地添加entry
到TB
:
class entry
{
public:
entry(int a_key, int a_next = 0) : key(a_key), next(a_next) {}
int key;
int next;
};
TB.push_back(new entry(val));
TB.insert(TB.begin(), new entry(val));
答案 1 :(得分:1)
TB
向量为空,直到用一些指针填充它。
例如。 TB.resize(100);
。
TB
中的点应指向有效地址,即一些有效的entry
实例。例如。 TB[0] = new entry();
。
所以:
std::vector<entry *> TB(1);
TB[0] = new entry();
TB[0]->key = 42;