PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/04/12 23:39:50
Name Magic_'Love'
Subject c언어 질문드립니다.
프로그램을 작성해서 컴파일을 마쳤습니다.

에러나 워닝이 전혀 없구요 실행을 하려고 하니까 문제가 발생했다고 종료가 됩니다.

디버그를 해봤는데

커서가 메인 함수로 들어가려는 순간 stack이 overflow라면서 안되더군요..

여러가지 이유는 많이 봤어도 stack이 overflow라는건 처음보네요..

논리적으로는 아무런 문제도 없는것 같은데 이게 무슨 경우일까요?

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
MoreThanAir
09/04/12 23:43
수정 아이콘
워낙 다양한 경우가 있어 소스를 보지 않고는 모르겠지만 일단 스택이 넘쳤다는걸로 보아...

혹시 프로그램 데이타에 엄청난 양의 데이타를 넣으셨나요?

예를 들어 int array[3434343434]; 이런식으로 큰 데이타가 혹시 있나 한 번 보세요.
09/04/12 23:45
수정 아이콘
recursion문제일 수도 있습니다.
Magic_'Love'
09/04/12 23:45
수정 아이콘
MoreThanAir님// 전혀 아닙니다. 저도 그럴것 같아서 계산해봤는데

배열 여러개랑 변수 다 더 해도 2MB도 안됩니다.... 헉..;;

도저히 오버플로우가 발생될것 같지 않은데요...
Magic_'Love'
09/04/12 23:46
수정 아이콘
Crom님// 리커젼은 사용하지 않았습니다. 따로 함수를 만들어 쓰지도 않고 메인에서 모든걸 처리하고 있습니다.
MoreThanAir
09/04/12 23:46
수정 아이콘
코드가 길지 않으면 한 번 긁어붙여주시죠. 궁금하네요...흐흐
MoreThanAir
09/04/12 23:46
수정 아이콘
Crom님// 저도 recursion은 생각해보았는데 메인에 들어가자마자 overflow라고 하시니...^^;
Magic_'Love'
09/04/12 23:49
수정 아이콘
#define N 512

void main()

unsigned char a[N][N];
unsigned char b[N][N];
unsigned char c[N][N];
unsigned char d[N][N];
float e[256] = {0,
;
int f[256] =
0,
;
int i, j, g, h;
FILE *fp;

}

변수 선언부만 붙였습니다.
나머진 좀 길어서요...;;
09/04/12 23:51
수정 아이콘
float 배열 선언하면서 stack overflow되었을 가능성이 커 보입니다.
main함수 밖에서 선언해보세요.(그래도 안되면... 다음분이 ;;)

MoreThanAir님// main()에서 바로 overflow한다는 걸 허투루 읽었습니다. 제 착오입니다 하하..
Magic_'Love'
09/04/12 23:53
수정 아이콘
Crom님// 4바이트 * 256인데 이걸로 오버플로우가 될까요?
화이트푸
09/04/12 23:56
수정 아이콘
정적 배열은 결국 스택오버플로우를 일으킬 가능성이 높습니다.. 그것도 상당히요.
간단하게 이미지처리할때 2차배열로 여러개 잡다가 아무것도 못해보고 스택오버플로우를 맛볼 수 있죠..

2중포인터를 써서 동적 할당을 해보시는게 어떠실런지... 넓디 넓은 힙 영역을 애용합니다!!
MoreThanAir
09/04/12 23:56
수정 아이콘
지금 데이타가 모두 정적으로 선언되었기 때문에 일단 DS(데이타 세그먼트)에 프로그램이 실행되기 전에 할당이 됩니다.
1바이트짜리가 일단 512*512bytes 거기다가 변수가 4개니까 4배가 되겠네요.
float가 256개
integer가 256개
integer 변수 4개
파일 포인터 변수 한개

float 위의 선언만으로 1048576바이트가 필요합니다.
이것이 DS의 범위를 넘어간 것 같습니다.
변수를 포인터로 선언 후에 필요할 때 동적할당 해서 사용해야 될 듯 합니다.
MoreThanAir
09/04/12 23:57
수정 아이콘
추가로 N의 값을 10으로 해서 시험해보시면 제대로 될껍니다. 그래서 제가 처음에 배열 인덱스가 큰 값이 아니었는지 물었던거구요.
참고로 정적으로 변수들이 선언되면 값을 넣지 않아도 메모리 상의 일정 부분을 미리 allocate하는겁니다.
개념less
09/04/12 23:57
수정 아이콘
원래 좀 그러지 않나요? 잡아 먹는 용량이 몇 기가 이런 게 아니더라도 상대적으로 큰 어레이 만들 경우는 동적 할당을 하는 편이 낫던데요.

int a[200][5000] 뭐 이런식으로 잡으면 런타임 에러내며 다운 나는 경우 종종 있더라구요.

동적 할당이 문제 생기는 경우가 아니라면 귀찮더라도 그렇게 해보시는 게 어떨까요?

저게 에러나는 크기가 os 나 메모리 양에 따라서 가변적이라 동적이 안전한 것 같더라구요.

이상 C 허접의 답변이었습니다. 크
Magic_'Love'
09/04/13 00:08
수정 아이콘
아.. 그렇군요.. 해결됐습니다.

unsigned char[N][N]을 4개에서 1개로 줄이니까 되네요...

저는 스택공간이 꽤나 크다고 생각했는데 꼭 그런것도 아닌가보네요... 후훗 어쨌든 하나 더 배웠네요..

답변 주신 분들 모두 진심으로 감사드립니다.

아 그리고 stack공간이 보통 얼마정도 되는지 아시는분 계신가요?
MoreThanAir
09/04/13 00:12
수정 아이콘
시스템마다 다릅니다. 보통은 전체 메모리 크기에도 영향을 받습니다
http://www.computerworld.com/computerworld/records/images/story/image004.jpg
이 그림을 참고하세요
Magic_'Love'
09/04/13 00:31
수정 아이콘
MoreThanAir님// 감사합니다.
09/04/13 10:35
수정 아이콘
스택을 아주 크게 잡으면 컴파일도 안됩니다
이 크기를 실험해 봤었는데 컴파일러마다 다르게 나오고... 왔다갔다 하더군요
중간 크기면 경험하신 것 처럼 실행 단계에서 에러가 나옵니다
스택에 대해 공부하시려면 해킹 쪽에 오버플로우 강좌를 찾아보세요
버퍼 오버플로우가 가장 쉬운데 이것에 대해 공부하면 스택의 사용에 대해 확실히 알 수 있습니다
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
53746 호텔 혼숙여부 질문입니다. [8] 키라야마토16909 09/04/13 16909
53744 이런자격증도 있나요?[기업관련] [5] 노스트라다무2123 09/04/13 2123
53743 중복 접속해도 사용 가능한 음악사이트 좀 알려주세요~ [2] 서명덕2123 09/04/13 2123
53742 물리 질문 드립니다. [1] 타우τ1636 09/04/13 1636
53740 영어회화책 추천 좀 바랍니다+책 질문... 비야레알2131 09/04/13 2131
53739 음반정보 사이트를 찾습니다. [4] il manifico2160 09/04/12 2160
53738 c언어 질문드립니다. [17] Magic_'Love'1801 09/04/12 1801
53737 [경제학]다시 급 밀턴 프리드먼에 대한 질문입니다~ 래토닝1597 09/04/12 1597
53736 토익 몇점정도 되어야 상위권이라고 하죠? [10] 비야레알4441 09/04/12 4441
53735 1박2일 볼 때 멀미 나는 분 계세요? [6] MoreThanAir2462 09/04/12 2462
53734 한글로 된 사진 파일이 인터넷에서 안 뜨네요~ [2] 모르니~1826 09/04/12 1826
53733 삼각함수질문좀하겠습니다.. tanx에서x 구하는법좀..ㅠㅠ [4] 불타는오징어2657 09/04/12 2657
53732 렌즈를 바꾸려고 하는데 몇가지 질문좀 하겠습니다. [1] Jess:D1759 09/04/12 1759
53731 (카오스질문)'위닝카오스' 사용 질문입니다. [4] ☆낼름낼름☆5168 09/04/12 5168
53729 프리드먼의 신화폐수량설 질문입니다. [6] 래토닝2183 09/04/12 2183
53728 수능 영어듣기 잘하는 방법 [5] 서재영2132 09/04/12 2132
53727 노트북 tv-out 질문입니다. [1] 상신유지1585 09/04/12 1585
53726 노건평 비리 & 노무현 전 대통령의 뇌물 수수 사건에 대한 질문. [5] KnightBaran.K3024 09/04/12 3024
53724 영어 학습에 대해서... [2] 순수모방1569 09/04/12 1569
53722 선형계획법(WINQSB사용) 하다가 궁금한게 있어서 글을 올립니다. [1] 콜라박지호2617 09/04/12 2617
53719 맵핵상대로 어떻게 싸우는게 좋나요? [11] 3186 09/04/12 3186
53717 data(자료),info(정보),지식의 차이를 설명해주세요, [9] Red Sniper3744 09/04/12 3744
53716 내일 입대합니다. 질문이요! [8] 가니야1944 09/04/12 1944
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로