gpt4 book ai didi

c++ - 试图从指针 vector 中取消引用指针的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:48 25 4
gpt4 key购买 nike

我有一个指向对象的指针 vector ,我正在使用 std::vector::iterator` 对其进行迭代。由于返回的元素本身是一个指针,我两次取消引用迭代器,一次返回指针,一次解析指向实际对象的指针。

我正在尝试调用一个返回 std::string 的成员函数 (getClass),我已经尝试了两个 (**it).getClass()(*i​​t)->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
.
.
.
}
.
.
.
}

vector 是 m_records ... code

dataRecord 是这样定义的... code

回答有关填充 vector 的问题:

数据是从文本文件中读取的,除非必须(212 行),否则我真的不想发布整个内容,但填充 vector 的相关代码如下。 dataRecord 对象的构造函数采用字段对象的 vector 。我使用一个临时指针,使用 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;
}

最佳答案

在我看来, vector 元素的初始化很糟糕。也许您必须在测试提取 vector 之前独立测试填充 vector 的代码。对不起我的英语 ;)

关于c++ - 试图从指针 vector 中取消引用指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com