2013-09-02 4 views
2

어설 션 오류 란 무엇입니까? 나는 함수에 전달되는 포인터의 NULL 값으로 인해 발생할 수 있다는 것을 읽었습니다. Visual Studio에서 파일을 읽고 있는데이 파일이 있는지 확인합니다. 어설 션 오류가있을 수 있습니까?Microsoft Visual Studio에서 어설 션 오류가 무엇입니까? 및 처리되지 않은 예외 액세스 위반?

또한,이 코드는 인터넷에서 인터넷 (H.264 비디오 코덱의 참조 소프트웨어)에서 다운로드

assert(pred_dir<=2); 

내 C 프로그램에서 어설 문을 발견하고 난 아주 확실하지 않다 어떻게 이런 오류가 발생합니다. 죄송합니다. 너무 커서 네 개의 프로젝트로 구성되어 있기 때문에 소스 코드를 게시 할 수 없습니다. 텍스트 파일을 읽도록 코드를 수정하고이 오류가 발생했습니다.

또한 처리되지 않은 예외 인 액세스 위반 오류는 무엇입니까?

+0

"assert - 어설 션이 틀린 경우 프로그램 중단" – sujin

답변

2

assertion은 프로그래머로서 프로그램의 특정 지점에서 분명히 사실 일 것으로 예상되는 조건입니다. 많은 프로그래밍 언어는 조건을 주장하는 방법을 제공하며, 프로그래머는 어설 션을 사용하여 많은 문제를 발견하고 진단합니다.

assert(a == 0); 

을 런타임시 경우, a는 특정 부분에 0되지 않습니다 :

프로그램의 특정 시점에서, 당신은 0을 할 a라는 변수를 기대하는 경우, 예를 들어, 사용자가 쓸 수 있습니다 프로그램의 경우 인공 오류가 발생하고 디버거가 바로 멈추어 문제를 진단하고 a0이 아닌 이유를 이해할 수 있습니다.

매우 일반적인 주장은 특정 예에서

assert(some_pointer != NULL); // We already checked this before 

처럼 pred_dir라는 변수가보다 작거나 2 같 될 것으로 예상된다 간다. 어설 션 오류가 발생하면 어떤 이유로 pred_dir2보다 큼을 나타냅니다. 프로그램의 나머지 부분이 이것을 기대하지 않기 때문에 계속 진행하는 것은 의미가 없으며 프로그램이 바로 멈출 것입니다.

어설 션은 사용자에게 오류를 표시하는 방법이 아닌 "온 전성 검사"를 구현하는 데 도움이되는 디버깅 도구입니다. 따라서 프로그램을 만들 때 많은 것을 사용하여 프로그램 상태에 대한 귀하의 모든 가정이 올바른지 확인하십시오. 프로그램이 정확하다면, 단정은 결코 프로그램을 중단 시켜서는 안됩니다.

어설 션은 디버깅을 돕기 때문에 사용자에게 배포 할 프로그램을 릴리스 할 때 어설 션을 검사하는 것은 의미가 없습니다. 따라서 많은 프로그래머가 그렇게 할 때 단언 검사를 중지합니다. Visual Studio와 같은 많은 환경에서는 릴리스 빌드를 만들 때 자동으로 해제합니다.

wikipedia article을 확인하십시오. 자세한 설명은 어설 션을 참조하십시오.

릴리스 된 제품 또는 타사 라이브러리에서 어설 션이 발생하면 해당 프로그램에 오류가있는 것일 가능성이 큽니다. 문제를 재현 할 수 있으면 프로그램 작성자에게보고하십시오.

+0

고마워요! 프로그램이나 명령 프롬프트의 .exe 파일을 실행하면 어설 션이 평가됩니까? 프로그램이 예기치 않게 중단됩니다. 이미 18 개의 버전이 있으므로 다운로드 한 프로그램에 오류가 있는지 여부는 확실하지 않습니다. Visual Studio 11.0 \ VC \ crt \ src \ crt0msg.c에있는 crt0msg.c에 오류가 있는지 확실하지 않습니다. 프로그램을 읽은 바에 따라 프로그램이 깨지기 때문에 프로그램이 아주 멀리 떨어져있을 것입니다. 오류를 일으킨 지점. 내가 뭘 잘못하고 있는지 모르겠다. 하지만 도와 줘서 고마워! – mc8

+0

@wangdongchaine : 예, 아니오. 어설 션은 프로그램의 일부이므로 프로그램 실행 방법 (명령 프롬프트 또는 디버거 또는 프로그램 실행 방식에 관계없이)에 관계없이 평가됩니다. 그러나 배포를 위해 프로그램을 보내면 디버거 보조 도구로 사용되기 때문에 어설 션 검사는 프로그래머에 의해 꺼지며 보통 프로그램 사용자에게는 거의 사용되지 않습니다. 어설 션 검사를 사용하여 프로그램을 제공하는 것은 가능하지만 사용자에게 많은 도움이되지는 않으므로 대개 꺼집니다. –

1

질문에 대답하려면 : 어설 션 오류 란 무엇입니까?

프로그래머가 어떤 조건이 항상 중요하며 조건이 거짓 일 때 실행을 계속해서는 안되기 때문에 조건이 매우 중요하다고 생각하면 그는 단언 할 수 있습니다. 조건 (pred_dir < = 2)이 true를 반환하면 실행은 정상적으로 계속되지만 false를 반환하면 실행이 중단되고 어설 션이 false를 반환하는 것으로 표시됩니다.

편집 : 어설 션은 코드를 디버깅하는 데 사용하거나 매우 잘못된 것이 발생한 경우 실행을 중단하는 데 사용됩니다.

0

이 오류는 컴퓨터의 Temp 폴더에 읽기 전용 액세스 제어가 지정되어 있기 때문에 발생할 수 있습니다. 따라서 Visual Studio .NET 또는 Visual Studio 2005 설치 ​​응용 프로그램은 임시 설치 파일을 로컬 하드 디스크에 복사 할 수 없습니다.

솔루션 :이 문제를 해결하려면 Temp 폴더에 대한 읽기 전용 액세스 제어를 제거하십시오. 이렇게하려면 다음과 같이하십시오.

a) 컴퓨터에서 Temp 폴더를 찾습니다.

b) 참고 일반적으로이 폴더는 사용자 이름이 사용자 이름 인 C : \ Documents and Settings \ User Name \ Local Settings에 있습니다.

c) Temp를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭합니다.

d) 특성에서 읽기 전용 확인란의 선택을 취소하십시오.

참고 : 특성 변경 내용 확인 대화 상자가 나타날 수 있습니다 (이 동작은 Temp 폴더의 내용에 따라 다름). 이 대화 상자가 나타나면이 폴더, 하위 폴더 및 파일에 변경 내용 적용을 클릭 한 다음 확인을 클릭합니다.

e) 확인을 클릭하십시오.

+0

처리되지 않은 예외 및 액세스 위반 오류의 경우 버전을 설치하거나 스크립트를 실행하는 동안 이러한 오류가 발생하면 알려주십시오. – Sweet72

+0

나는 이것을 시험해 볼 것이다! "버전을 설치하거나 스크립트를 실행하는 중에 이러한 오류가 발생하면 알려주십시오"라는 의미는 무엇입니까? – mc8

+0

다음과 같은 오류 메시지가 나타납니다. 처리되지 않은 예외 또는 액세스 위반 오류 – Sweet72