队列返回错误的pair.first值

问题描述 投票:1回答:1

我有一个奇怪的问题:在从队列中弹出(之前​​推送的一对ints)后,我得到对的第二个元素的正确值和第一个元素的完全随机值。

例如,如果我推pair<int, int> = (368, 125)然后我得到pair =(14416384,125)。

我不能使用自己的struct {int first, int second}而不是对,因为后来我需要将这对ints存储到设置中以便能够快速找到它们并且我不想显着更改应用程序。

你知道怎么解决它吗?

代码片段如下所示:

vector<pair<int, int>> objekt;
set<pair<int, int>> przetworzone;
int pointX = m_imgIN.pointX;
int pointY = m_imgIN.pointY;
BYTE currPixel = m_imgIN.m_bitmapObject.GetPixel8(pointX, pointY);

if (currPixel > 0)
{
    queue<pair<int, int>> kolejka;
    kolejka.push(make_pair(pointX, pointY));  //<- here: pointX=368 and pointY=125 

    while (kolejka.size() != 0)
    {            
        pair<int, int> p;
        p = kolejka.front(); //<- here: p.first=14416384 and p.second=125
        kolejka.pop();

        if (m_imgIN.m_bitmapObject.GetPixel8(p.first, p.second) > 0)
        {
            //...
c++ queue std-pair
1个回答
1
投票

所以你的代码工作正常:http://ideone.com/ainPyU读回你输入的确切值。

kolejka是本地创建的,并且在您显示的代码中只添加了1个元素,然后循环它的内容。除非您没有向我们展示代码,否则这没有意义。我怀疑未显示的代码实际上是导致问题的原因。

因此,在这些前提下,在这些行之间发生了其他事情,我建议你写出超出另一个容器的界限并踩到你的第一个元素的内容。我通过在kolejkafirst成员中的第一个元素的地址上设置内存断点来调试它。

© www.soinside.com 2019 - 2024. All rights reserved.