2011-11-21 73 views
-3

我有一個std::vector<int>啓用卡。 我希望計算機選擇一個隨機:生成隨機數組索引?

int r = 0; 
r = rand() % m_enabledCards.size(); 
cardCount.push_back(m_enabledCards[r]); 

出於某種原因,這個返回指數是出界和矢量有大約13元。

什麼可能是錯的?

感謝

+3

什麼讓你相信索引超出了界限? –

+2

「什麼可能是錯的?」你沒有向我們展示的東西。嘗試在valgrind下運行你的程序,並且使用m_enabledCards.at(r)讓它拋出,如果它以某種方式得到一個超出邊界的索引。 –

+1

這個代碼片段沒有錯誤。問題一定在其他地方。 – kol

回答

0

因爲我看不出什麼毛病,你發佈的代碼,誤差應在其他地方,除非我忽略了一些東西。也許你的m_enabledCards載體實際上是空的?雖然這應該給模線的「除零」誤差,但我想不出任何其他原因與給定的代碼。

0

也許是因爲類型衝突(size()返回unsigned int)。 嘗試鑄造size()爲int或將其保存在一個int變量:

int my_size = m_enabledCards.size(); 
r = rand() % my_size; 

如果仍然無效,請嘗試打印rand()值。

+0

size()可能返回一個size_t,而不是unsigned int。在32位系統上它們可能是相同的;在64位可能不會。 –

+0

@John,'size()'返回一個'size_type',這是一個無符號整數類型,根據:http://www.cplusplus.com/reference/stl/vector/size/ – juliomalegria

+0

當然,但這種類型是通常實際上是size_t,而不是「unsigned int」,正如你所說的('unsigned int'不同於「無符號整型」)。 –