운영체제
[운영체제] Singal 11 오류 발생 시 (SIGSEGV)
2021. 2. 8. 09:46반응형
우선 SIGSEGV는 segmentation fault라는 의미.
원인
프로그램이 할당되지 않은 메모리에 접근한 경우 발생하는 오류입니다.
즉, 프로그램이 유효하지 않은 메모리에 접근하거나, 할당하지도 않은 메모리에 접근할 때, 발생하는 에러임.
=> 포인터 변수 잘못쓴 경우일 확률이 매우 높음.
예상 실제 원인
아래의 코드가 segmentation fault를 유발한다. 아래의 코드를 작성했는지 확인한다. 만약 그렇다면 고쳐야한다.
1. Segmentation fault를 유발하는 코드 1
char *c = NULL;
...
*c; // dereferencing a NULL pointer
Null 값을 가진 포인터 변수를 참조하면, 에러가 발생할 것이다.
2. Segmentation fault를 유발하는 코드 2
char *c = "Hello";
...
c[10] = 'z'; // out of bounds, or in this case, writing into read-only memory
배열의 길이 넘은 값을 참조하면, 에러가 발생할 것이다.
3. Segmentation fault를 유발하는 코드 3
char *c = new char[10];
...
delete [] c;
...
c[2] = 'z'; // accessing freed memory
해결방법
위처럼, 포인트 변수를 잘못 쓴 곳을 확인해보자. 그리고 고치자.
당신의 시간을 절약했다면 아래의 하트 부탁드립니다.
반응형