본문 바로가기
Programming

fopen 의 segmentation fault.

by 단창 2012. 5. 3.

나는 컴퓨터과를 나오지 않다보니 프로그래밍하는데 기본이 없다. 사실 코딩을 하면서 자료구조를 왜 배워야하지? 그냥 코딩 하면 되잖아 라는 안일한 생각을 했는데 오늘 피봤다..... -_- 

 

FILE * fp;

fp = fopen("a.txt","rb");

 

를 하면 fp엔 파일이 존재할 경우엔 해당 파일 포인터가, 존재하지 않을땐 NULL이 들어간다.

그런데 fopen 그 자체에서 segmentation fault 가 뜨는 이유는 무엇인가 ㄷㄷ

 

구글링을 해보니 다양한 이유가 있었는데

나의 경우는 fopen이 아니라, OS자체의 Stack memory 를 넘어선 것이었다. (stack overflow 사이트를 그리 들락날락하면서 이런것을 몰랐다니-_-)

 

 

 

 

tcshell 의 경우 limit 라는 명령은 보다 시피 여러가지 정보를 보여주는데(bash shell은 ulimit ) 내가 사용하는컴 램이 12GB인데 최대 스택사이즈가 8MB로 잡혀져 있다..-_-;

uint16_t var[~~~~~~];

등의 배열을 남발하다 보니, 내가 만든 로컬 배열이 stack사이즈를 넘어가고, 이 뒤로는 다른 커맨드가 안먹는 것이었다. (그런데 왜 하필 fopen에서 세그폴트가 뜰까? 아마도 fopen에서 남은 스택을 이용하기 때문이겠지.?? )

 

이럴땐 배열을 동적할당 해주거나, 전역변수 또는 static 변수로 지정 해 주면 땡!

스택사이즈 제한은 로컬변수에만 해당되는 모양이다.. 동적할당은 사용자가 지정하는 만큼 되는거겠지.. 흠.. (나의 추측..)

 

아니면 이건 좋지 않은 방법 같으나,

ulimit -s unlimited (bash 기준)

로 스택사이즈를 무제한으로 두는것 (해보진 않았다)

 

앞으로 큰 배열은 동적할당 해서 쓰기로 한다. -_-

반응형