2011-11-21 9 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 벡터가 실제로 비어 있습니까? 모듈러 선에 대해 "division by zero"오류가 발생해야하지만, 주어진 코드로 인해 다른 이유는 생각할 수 없습니다.

0

는 아마 때문에 유형의 충돌 (size()unsigned int를 반환)의입니다. int로 size() 캐스팅 시도하거나하는 int 변수에 저장합니다

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

을 그 여전히 작동하지 않는 경우, rand() 값을 인쇄 해보십시오.

+0

size()는 아마도 unsigned int가 아닌 size_t를 반환합니다. 32 비트 시스템에서는 동일 할 가능성이 높습니다. 64 비트에서 가능하지 않을 수 있습니다. –

+0

@ 존은'크기()는'그에 따라, 부호없는 정수 타입이다하는'size_type'를 반환 http://www.cplusplus.com/reference/stl/vector/size/ – juliomalegria

+0

물론 이죠,하지만 그 유형입니다 종종 실제로 size_t로하지 "서명되지 않은 INT"당신이 말한대로 ('부호 int'는 "부호없는 정수형"과 동일하지 않습니다). –