我有一个指向我通过使用std :: vector :: iterator`遍历的对象的向量。由于返回的元素本身就是一个指针,我将迭代器两次解引用,一次返回指针,一次解析指向实际对象的指针。尝试从指针向量中取消引用指针的分段错误
我想调用一个返回std :: string的成员函数(getClass
),我试过(**it).getClass()
和(*it)->getClass()
但都给我一个分段错误。我一直觉得我失去了一些明显的东西。
部分功能的代码:
void dataSet::createFolds()
{
// Shuffle the data vector
std::random_shuffle(m_records.begin(), m_records.end());
std::cout << "STARTING MAIN LOOP. THERE ARE " << m_records.size() << " RECORDS\n";
// iterate through the data vector and assign each to a fold
std::vector<dataRecord *>::iterator it = m_records.begin();
while (it != m_records.end())
{
std::string currentClass = (*it)->getClass(); // SEG FAULT HERE
.
.
.
}
.
.
.
}
的载体是m_records ... code
dataRecord被这样定义... code
在回答关于填充向量的问题:
数据从文本文件中读取,我真的不想发布整个事情,除非我必须(212行),但填充矢量的相关代码如下。 dataRecord对象的构造函数接受一个field对象的向量。我使用临时指针,使用new来创建对象,然后push_back指针。
while ...
{
std::vector<field> fields;
// build the fields vector
for (unsigned int i = 0; i < numAttribs; ++i)
fields.push_back(field(data.at(i), attribTypes[i]));
// create the new dataRecord
dataRecord * newRecord = new dataRecord(fields);
// add the record to the set
m_records.push_back(newRecord);
++recordNum;
std::cout << "read record " << recordNum << std::endl;
}
看起来像这个错误与你如何填充矢量有关。发布相关代码,我们可以看看。 –
你的定义很好,但我想问题在于别的地方。也许在你填写矢量的时候?你是否100%肯定你不向该向量中插入任何NULL值? – Constantinius
你的一个或多个指针可能是悬空的,即指向被破坏的东西? –