C++ 链表、向量和指针问题

C++ 链表、向量和指针问题,c++,class,pointers,vector,C++,Class,Pointers,Vector,好的,这是我的问题: 我实现了一个Move类,其中一个变量Move*subMove指向一个“subMove” 我有一个列表(vector的Moves,我使用vector::iterator循环遍历) 我有一个全局移动对象(比方说链接列表的“根”),我们的函数最初是用它调用的 我正在尝试将当前移动(从循环)分配给当前根的子移动字段 这就是问题产生的原因 我的代码(大致)如下所示: int Game::doSth(Move & pv) { vector<Move> m

好的,这是我的问题:

  • 我实现了一个
    Move类
    ,其中一个变量
    Move*subMove
    指向一个“subMove”
  • 我有一个列表(
    vector
    Move
    s,我使用
    vector::iterator
    循环遍历)
  • 我有一个全局移动对象(比方说链接列表的“根”),我们的函数最初是用它调用的
  • 我正在尝试将当前移动(从循环)分配给当前根的子移动字段
这就是问题产生的原因

我的代码(大致)如下所示:

int Game::doSth(Move & pv)
{
    vector<Move> moves;
    this->possibleMoves(moves);
    for (std::vector<Move>::iterator move = moves.begin(); move!=moves.end(); ++move)
    {
        // Do sth
        int subResult = this->doSth(*move);
        if (someConditionIsTrue)
        {
            // yep, we want to store THIS move as a submove

            // This works - without memory errors - 
            // but still something goes weird, so I'd prefer creating a new object
            pv.subMove = &(*move);

            // Also tried something along the lines of `pv.subMove = new Move(*move)`
            // - yes there is an appropriate copy constructor - 
            // but this leads to a `segmentation fault` error
        }
    }

    // return something;
}
int游戏::doth(移动和pv)
{
矢量运动;
此->可能移动(移动);
对于(std::vector::iterator move=moves.begin();move!=moves.end();++move)
{
//做某事
int subResult=this->doSth(*move);
如果(某个条件是真的)
{
//是的,我们想将此移动存储为子移动
//这可以工作-没有内存错误-
//但还是有些奇怪,所以我更喜欢创建一个新对象
pv.subMove=&(*move);
//还尝试了类似“pv.subMove=new Move(*Move)的内容`
//-是,有适当的副本构造函数-
//但这会导致“分段错误”错误
}
}
//归还某物;
}

有什么想法吗?

“不起作用”是一个不充分的问题描述。代码可以编译,对吗?问题是什么?@KonradRudolph问题很简单:为什么
pv.subMove=new Move(*Move)触发分段错误,而
pv.subMove=&(*move)有效(即使结果有点混乱…?你有一个合适的副本结构可以进行深度复制吗?@JoachimPileborg,请将你的答案作为一个典型的答案发布,我将很高兴立即接受它,这样你就可以得到你应得的所有荣誉。是的,就是这样。切中要害。大头钉såmycket!:-)您的
doSth
函数是否使用
*move
做了一些疯狂的事情?