gpt4 book ai didi

c++ - 弹出倒数第二个

转载 作者:行者123 更新时间:2023-11-30 02:02:35 24 4
gpt4 key购买 nike

我是一名 C# 程序员,遇到了乱七八糟的指针问题,但我无法找出错误所在。我可以在列表中使用一些帮助

所以基本上我有一堆卡片,这些卡片保存在列表中。我只想取最上层并将其返回给函数。我可以使用 pop_back() 但最后一张卡片必须保持原样,因为它是卡片背面(我稍后会用纹理和东西制作它)

Card * CardStack::HandOut()
{
if (m_Stack.size() > 1)
{
list<Card *>::iterator it = m_Stack.end();
advance(it, -2);
Card *ret = *it;
Card tmp = *ret;
Card *tmpp = &tmp;
m_Stack.remove(ret);
return tmpp;
}
return NULL;
}

所以我想总是弹出倒数第二张卡片。我敢肯定这完全是初学者的错误:(

最佳答案

你正在返回一个指向局部变量的指针,

Card tmp = *ret;
Card *tmpp = &tmp;
m_Stack.remove(ret);
return tmpp;

函数退出后,它不再存在。因此,当您稍后使用指针时,您会调用未定义的行为。

你不应该为 tmptmpp 而烦恼,返回 ret 应该这样做, remove 不会'销毁卡片,它只是从堆栈中删除(指向)卡片。

关于c++ - 弹出倒数第二个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017852/

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