我有一個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