반응형

우선 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

 

 

해결방법

 위처럼, 포인트 변수를 잘못 쓴 곳을 확인해보자. 그리고 고치자.

 

당신의 시간을 절약했다면 아래의 하트 부탁드립니다.

 

반응형