나는 컴퓨터과를 나오지 않다보니 프로그래밍하는데 기본이 없다. 사실 코딩을 하면서 자료구조를 왜 배워야하지? 그냥 코딩 하면 되잖아 라는 안일한 생각을 했는데 오늘 피봤다..... -_-
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 기준)
로 스택사이즈를 무제한으로 두는것 (해보진 않았다)
앞으로 큰 배열은 동적할당 해서 쓰기로 한다. -_-
'Programming' 카테고리의 다른 글
VTK in c++ undefined reference to ~~~~ 라이브러리를 찾지 못할때. (0) | 2012.08.09 |
---|---|
리눅스 C 에서 파일 다루기 (0) | 2012.05.03 |
check if file is used or not using c on linux (0) | 2012.04.14 |
visual studio 2010 path, library 관리 (0) | 2012.02.27 |
MFC 메세지 처리, MFC winsock 비동기 방식 (0) | 2011.12.01 |