2013-06-08 2 views
1

저는 Java를 꽤 오랫동안 사용하여 C++로 다시 이동해야했습니다. 전에 C++에서 try/catch를 사용하지 않았고, 다시 작업 할 때 매우 어리석은 문제가 발생했습니다.C++ : try/catch를 사용하여 알 수없는 크기의 배열에 액세스합니다.

알 수없는 크기의 배열이 있고 그 안에있는 모든 숫자를 알아보기를 원합니다. 그러나, 나는 정확한 크기를 줄 C++ 벡터를 사용하고 싶지 않다. 내가 시도한 것은 그 자체로 끝내기로되어 있지 않은 for 루프를 갖는 것이다. 나는 예외를 던질 때 그것을 깨고 싶다. 나는 그것을 잡아서 문제를 처리 할 것이다. 그러나 작동하지 않으며 예외가 발생하지 않습니다.

누구든지 나를 계몽시킬 수 있습니까? :) 고맙습니다. 그 경계를 넘어서 배열 액세스

for(int i = 0; i < 1000; i++) { 
     try { 
      cout << symbols[i] << " "; 
     } catch (int ex) { 
      cout << "thrown"; 
      break; 
     } 
} 
+0

* "정확한 크기를 줄 수있는 C++ 벡터를 사용하고 싶지 않습니다."* - 왜 안 되니? –

+0

XY 문제입니다. 배열의 요소를 반복하거나 배열의 길이를 찾고 싶을 것입니다. 당신은 try-catch를 여기 (사용하지 않을 것입니다) 사용하고 싶지 않습니다. – juanchopanza

+0

Ed S.> 여기에서 문제가 무엇인지 배우고 싶습니다. – Stein

답변

5

정의되지 않은 동작하지 예외를 준다.
정의되지 않은 동작은 프로그램이 유효한 C++ 프로그램이 아니며 모든 동작을 표시 할 수 있음을 의미합니다. 그러나 일관성있게 동작 할 수는 없습니다.
크기를 직접 추적하고 해당 크기를 사용하여 반복하거나 원하는 경우 예외를 throw해야합니다.

+0

충돌이 발생하지 않고 특정 색인에 항목이 있는지 확인할 수있는 방법이 있습니까? – Stein

+1

@decas : 네, * "크기를 계속 추적하고 그 크기를 사용하여 반복하십시오"*. C++을 사용하는 법을 알고 있고'vector'를 사용하는 것처럼 코드를 작성하십시오. 실제로 배열이고 동적으로 할당되지 않으면'sizeof'를 사용할 수 있습니다. –

+0

@decas 배열의 크기가 컴파일 타임에 수정되면 그 핸들을 얻을 수 있습니다. 동적으로 할당 된 경우, 아니오. – juanchopanza

1

정의되지 않은 동작은 의 의미가 일 수 있음을 의미합니다. 확실히 "유형 X의 예외는 던져 질 것입니다"라는 의미는 아닙니다. 프로그램이 정의되지 않은 상태로 남습니다. 당신이 그것을 붙잡을 수 있더라도 그것을 고치기 위해 무엇을 할 것입니까? 당신이 할 수있는 일은 아무것도 없으며, 당신의 프로그램은 골칫거리입니다.

관련 문제