我有一个std::vector<int>
启用卡。 我希望计算机选择一个随机:生成随机数组索引?
int r = 0;
r = rand() % m_enabledCards.size();
cardCount.push_back(m_enabledCards[r]);
出于某种原因,这个返回指数是出界和矢量有大约13元。
什么可能是错的?
感谢
我有一个std::vector<int>
启用卡。 我希望计算机选择一个随机:生成随机数组索引?
int r = 0;
r = rand() % m_enabledCards.size();
cardCount.push_back(m_enabledCards[r]);
出于某种原因,这个返回指数是出界和矢量有大约13元。
什么可能是错的?
感谢
因为我看不出什么毛病,你发布的代码,误差应在其他地方,除非我忽略了一些东西。也许你的m_enabledCards
载体实际上是空的?虽然这应该给模线的“除零”误差,但我想不出任何其他原因与给定的代码。
也许是因为类型冲突(size()
返回unsigned int
)。 尝试铸造size()
为int或将其保存在一个int变量:
int my_size = m_enabledCards.size();
r = rand() % my_size;
如果仍然无效,请尝试打印rand()
值。
size()可能返回一个size_t,而不是unsigned int。在32位系统上它们可能是相同的;在64位可能不会。 –
@John,'size()'返回一个'size_type',这是一个无符号整数类型,根据:http://www.cplusplus.com/reference/stl/vector/size/ – juliomalegria
当然,但这种类型是通常实际上是size_t,而不是“unsigned int”,正如你所说的('unsigned int'不同于“无符号整型”)。 –
什么让你相信索引超出了界限? –
“什么可能是错的?”你没有向我们展示的东西。尝试在valgrind下运行你的程序,并且使用m_enabledCards.at(r)让它抛出,如果它以某种方式得到一个超出边界的索引。 –
这个代码片段没有错误。问题一定在其他地方。 – kol