2014-10-20 5 views
-7

여기에 문제의 프로그램이 있습니다. 무한 루프가 발생하는 이유는 무엇입니까? 벡터프로그램에서 무한 루프가 발생합니다.

#include <vector> 
#include <iostream> 
using namespace std; 

class Workshop 
{ 
public: 
    int pictureFrames(vector<int> pieces); 
}; 

int Workshop::pictureFrames(vector<int> pieces) 
{ 
    int count = 0; 

    for (int i = 0 ; i < pieces.size() - 2 ; i++) 
    { 
     for (int j = i + 1; j < (pieces.size() - 1) ; j++) 
     { 
      for (int k = j + 1; k < (pieces.size()); k++) 
      { 
       bool possible = (pieces[i] + pieces[j] > pieces[k]) && 
           (pieces[j] + pieces[k] > pieces[i]) && 
           (pieces[k] + pieces[i] > pieces[j]); 
       if (possible) 
        count++; 
      } 
     } 
    } 
    return count; 
} 

void main() 
{ 
    Workshop w; 
    vector<int> pieces; 
    pieces.push_back(100); 
    w.pictureFrames(pieces); 
} 
+2

미래에 코드를 강조 표시하고 'CTRL + K'를 누르거나 네 칸을 들여 쓰기하여 코드를 포맷하십시오. 각 줄을 백틱으로 감싸지 마십시오. 둘째, ['main main'은 C++에서 유효한 서명이 아닙니다] (https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c). 셋째, Visual Studio를 사용하고 있으므로 내장 된 디버깅 도구 (즉, 중단 점 설정)를 활용하여 프로그램의 오류 위치를 확인하십시오. –

+1

디버깅을 시도 했습니까? –

+4

이 문제를 직접 해결하려고 시도한 것은 무엇입니까? 적절한 지점에 디버그 출력물을 넣어 두는 것이 좋습니다 – harmic

답변

3

size()있어서 부호 형이다 size_t를 반환한다. 값이 1 인 부호없는 유형을 가져오고 2에서 빼면 매우 큰 숫자가됩니다.

pictureFrames 메서드 안에 다음 행을 넣으면 루프가 너무 오래 실행되는 이유를 관찰 할 수 있습니다.

cout << pieces.size() - 2 << endl;, 
0

전체 진단 기능을 사용하여 컴파일하려고 했습니까? http://coliru.stacked-crooked.com/a/e29de5a6cd9bd21e

main.cpp:15:25: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare] 

for (int i = 0 ; i < pieces.size() - 2 ; i++) 

        ~^~~~~~~~~~~~~~~~~~ 

[내부 루프에 대한 두 개의 반복을하고 void main()에 대한 불만]

는 진단은 매우 유익하다 :

는 여기를 참조하십시오.

int

인해 모듈로 산술이 정말 큰 되는 pieces.size() - 2, unsigned long 승진 (또는 무엇이든 size_t)와 비교된다.

관련 문제