나는 활성화 카드를위한 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
벡터가 실제로 비어 있습니까? 모듈러 선에 대해 "division by zero"오류가 발생해야하지만, 주어진 코드로 인해 다른 이유는 생각할 수 없습니다.
는 아마 때문에 유형의 충돌 (size()
는 unsigned int
를 반환)의입니다. int로 size()
캐스팅 시도하거나하는 int 변수에 저장합니다
int my_size = m_enabledCards.size();
r = rand() % my_size;
을 그 여전히 작동하지 않는 경우, rand()
값을 인쇄 해보십시오.
size()는 아마도 unsigned int가 아닌 size_t를 반환합니다. 32 비트 시스템에서는 동일 할 가능성이 높습니다. 64 비트에서 가능하지 않을 수 있습니다. –
@ 존은'크기()는'그에 따라, 부호없는 정수 타입이다하는'size_type'를 반환 http://www.cplusplus.com/reference/stl/vector/size/ – juliomalegria
물론 이죠,하지만 그 유형입니다 종종 실제로 size_t로하지 "서명되지 않은 INT"당신이 말한대로 ('부호 int'는 "부호없는 정수형"과 동일하지 않습니다). –
은 무엇 인덱스가 범위를 벗어 났음을 확신? –
"무엇이 잘못 될 수 있습니까?" 네가 우리에게 보여주지 않은 게있어. Valgrind의에서 프로그램을 실행 해보십시오, 또한 어떻게 든 아웃 오브 바운드 인덱스를 얻을 수없는 경우가 던질 수 있도록 m_enabledCards.at (R)를 사용합니다. –
이 코드 조각에는 오류가 없습니다. 문제는 다른 곳에서 발생해야합니다. – kol