2017-10-24 1 views
-1

내 프로그램은 큰 숫자의 "계산기"(+, -, *, /, %)이고 배열을 사용하고 있습니다. 부서별 정확한 숫자를 제외하고는 모두 괜찮습니다. 예 : "235904955217602177779531391566404600024660137230836722833991048650026087431751987982144871621272505722819200445400/291608731024614095661614"와 같이 올바른 답을 반환하지만 바로 다음에 충돌이 발생합니다. 디버깅을하고 SIGSEGV 오류가 발생했습니다. 그러나 그것은 프로그램이 끝날 때 바로 일어나고 있습니다. 나는이 오류가 어디서 왔는지 전혀 모른다. 프로그램 종료에프로그램의 오른쪽 끝에 SIGSEGV 오류가 있습니다. 코드 :: 블록

Here is the debug error.

[debug]Program received signal SIGSEGV, Segmentation fault. 

Here is the full program.

#include <stdio.h> 
... 

답변

0

세그먼트 오류 즉 SIGSEGV는 일반적으로 할 때 메모리가 손상되어, 예를 발생 버퍼 오버 플로우의 경우. 다른 말로 표현하자면 부패의 순간과 항상 일치하는 것은 아니지만 그 직후에 나타날 수 있습니다. 따라서 모든 컴파일 경고를 활성화하고 수정하고, 입력 인수 검사를 추가하고, 인덱스가 경계 내에있는 경우 버퍼에 액세스하기 전에 선언 한 다음 정적 코드 분석기를 사용하는 것이 좋습니다. 보풀. 이것은 코드 품질을 보장하기위한 것입니다.

또 다른 옵션은 특정 입력과 함께 항상 잡으려는 경우입니다. 입력 코드를 변경하거나 결국 코드를 ​​찾을 수있는 단축키 기능을 사용하여 코드 조각을 격리하려고합니다. 그러나 이것은 체계적인 접근법이 아니며, 다른 오류 시나리오가있을 수 있습니다.