有没有办法检查地图是否已在C ++ 98中初始化?

时间:2014-02-28 17:08:26

标签: c++

我在一个非常大的编码项目中遇到了问题。在一个函数中,我需要迭代一个map并插入一些东西,但程序的工作方式是前几次通过map还没有初始化我无法在该函数中初始化它,因为它初始化在其他地方需要是。所以当我尝试迭代地图并且尚未初始化程序崩溃时,问题是前几次。我在谷歌搜索等等,正在寻找一种方法来测试地图是否已经初始化,然后再继续使用该部分代码。我验证问题的方法是绕过前5k周期的代码段。这适用于这个特定的基准测试,但这不是一个强大的方法,我需要一些适用于许多不同基准测试的东西。提前谢谢。

if(map_is_initialized>=5000)
{
    for(std::map<RAddr, uint32_t>::iterator it = f_read_Prediction_Set->begin(); it !=    f_read_Prediction_Set->end(); ++it)
    {
        set = (((it->first) >> log2AddrLs) & maskSets) << log2Assoc;
        if(set == caddr)
            (*currentSets)[set] = 1;

    }
}

map_is_initialized+=1;

2 个答案:

答案 0 :(得分:2)

我认为这是一个地图指针, 如果您可以访问类的构造函数,请将其初始化为NULL 如果没有,请尝试在早期调用的函数或子类的构造函数

中将其初始化为NULL

稍后,您可以检查它是否为NULL

答案 1 :(得分:0)

你的问题有点不清楚。根据具体情况,您可以选择:

如果它就像构建地图之前的其他代码一样简单,你可以:

  • 运行其他代码,直到您进入基准测试循环之前初始化地图。
  • 将map指针初始化为NULL或使用一些“initialized”标志,如果指针为NULL或未设置标志,则不处理数据。

如果是在一个单独的线程中完成;一个适当的事件/条件变量可以做到这一点,或者你所拥有的while (!map_initialized) yield();等价物。