STL 라이브러리의 함정 - - 감지하기 어려운 버그

958 단어
다음 프로그램의 버그를 찾아주시겠어요?
int maxProfit2(vector<int> &prices)
{
  int local[3] = {0};
  int global[3] = {0};
  
  for(int i=0; i<prices.size()-1; ++i) 
  {
    int diff = prices[i+1] - prices[i];
    for(int j=2; j>=1; --j)
    {
      local[j] = max(global[j-1]+max(diff, 0), local[j]+diff);
      global[j] = max(global[j], local[j]);
    }
  }
  return global[2];
}

prices가 비어 있을 때, 프로그램에segmentationfault가 나타납니다.
분석:
prices가 비어 있을 때 for 순환 내부가 실행되지 않을 줄 알았는데, 뜻밖에도 실행되었다!!!
문제는 i prices.크기 ()가 되돌아오는 유형은 크기t, 사실은 기호가 없는 숫자,
무기호 수와 -1 연산을 할 때 유기호 수-1 은식을 무기호 수로 전환합니다. -1의 부호 표시는 0xffffffffffffffffff,
그래서 prices가 비어 있을 때 0 + 0xffffffffffffffff = 0xffffffffffffffff = 2^64-1
따라서 i < prices.size()-1(기호수 비교 없음) 만족;
어떡하지?
이렇게
int n = prices.size();//먼저 prices를size () 는 기호수 n에 부여됩니다.
다른 좋은 방법이 있는지 모르겠지만, 댓글을 남겨주세요...

좋은 웹페이지 즐겨찾기