我在一个非常大的编码项目中遇到了问题。在一个函数中,我需要迭代一个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;
答案 0 :(得分:2)
我认为这是一个地图指针, 如果您可以访问类的构造函数,请将其初始化为NULL 如果没有,请尝试在早期调用的函数或子类的构造函数
中将其初始化为NULL稍后,您可以检查它是否为NULL
答案 1 :(得分:0)
你的问题有点不清楚。根据具体情况,您可以选择:
如果它就像构建地图之前的其他代码一样简单,你可以:
如果是在一个单独的线程中完成;一个适当的事件/条件变量可以做到这一点,或者你所拥有的while (!map_initialized) yield();
等价物。