我有一個指向我通過使用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
你的一個或多個指針可能是懸空的,即指向被破壞的東西? –