리눅스에서 c언어로 시스템 프로그래밍 관련 코드를 작성하고 있었는데
세그멘테이션 오류(코어 덤프됨)
이라는 에러가 발생했다.
예전에도 한번 발생했던 기억이 있는데 그 당시에 오류 원인은 찾지 못했고 코드를 고쳐주었더니 해결된 적이 있었다.
세그멘테이션 오류는
- 포인터를 잘못 사용했을 경우
- 혹은 배열의 메모리를 잘못 사용했을 경우
- 포인터로 지정해놓고 초기화도 메모리 할당도 안해줬을 경우
위와 같은 경우에 발생한다고 한다.
나의 경우 지금은 에러가 사라져서 원인이 뭐였는지 확실하게 짚이지는 않는데 아마 터미널에서 아규먼트를 전달했어야 했는데 전달하지 않았으면서 내부 코드에서 그 요소를 사용하려고 접근했기 때문이 아닐까 라고 예상된다.
int main(int argc, char* argv[]) {
//생략
}
위와 같은 main을 사용해서 코드를 작성했는데 여기서 argv의 두번째 세번째 요소를 가져다 쓰는 코드가 있었다.
아마 그 코드때문에 세그멘테이션 오류가 발생하지 않았나 싶다. 주지도 않았으면서 쓰려고 하니까 에러가 났겠죵
직접 전부다 찍어보면서 눈으로 확인해보고 싶었지만 지금은 시간이 없다. 왜냐면 오늘까지 제출해야하기때문... 크크
아무튼 세그멘테이션 코어 덤프 오류가 발생하면 포인터 쓰는 곳에서 뭘 잘못했는지 포인터쓰는부분만 좀 살펴보자.
아 그리고 드문 경우지만 운영체제 호환이 안될경우에도 발생할 수 도 있다고 한다. 이건 정확하지 않은 정보 같은데 아무튼 솔라리스를 쓸 경우에 호환이 안되서 코어 덤프가 발생할 수 있다고 한다. 이건 좀더 살펴봐야 할것같다. 카더라일수도 있어서 정확하지 않다. (근데 사실 솔라리스 쓰는 사람이 없을거다.)
'C & C++ > C' 카테고리의 다른 글
[C] 메모리와 변수의 lifetime으로 인한 예상치 못한 결과 (0) | 2021.10.08 |
---|---|
[Linux] Ubuntu c programming - file open /read /write (0) | 2021.09.30 |
[Linux] fcntl.h와 unistd.h (0) | 2021.09.14 |
[C] void main(), int main(), main() 차이점 (0) | 2021.07.03 |
[C] 4년이 지나서 다시보는 C언어 - 핵심 정리 (0) | 2021.03.06 |