std with array index(not iterator)给出了分段错误

时间:2012-02-28 10:48:22

标签: c++ vector iterator

我在头文件中定义了这样的矢量

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;   

作业有什么问题?

2 个答案:

答案 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提供一个构造函数,以便更加简洁地添加entryTB

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)

  1. TB向量为空,直到用一些指针填充它。 例如。 TB.resize(100);

  2. TB中的点应指向有效地址,即一些有效的entry实例。例如。 TB[0] = new entry();

  3. 所以:

    std::vector<entry *> TB(1);
    TB[0] = new entry();
    TB[0]->key = 42;