kimsy96   6년 전

문제에 주어진 조건대로 x,y좌표를 움직이게끔 코드를 짰고,

좌표계산을 위해 구조체를 선언했습니다.

배열초과라던가 메모리 할당 등을 쓰지않아서 답이틀리면 틀렸지 런타임에러가 발생할거라고는 생각을 못했는데 아예 런타임에러가 떠버리네요.. 이유를 모르겠습니다.

djm03178   6년 전

arr과 str의 선언을 전역 범위로 빼보세요.

kimsy96   6년 전

네 감사합니다. 조금 있다 확인해보겠습니다.(계속 제 질문에 답변잘 해주시던데 너무너무 감사하네요)

그런데 이문제에선 굳이 저녀석들을 전역범위로 빼지않아도 되는거아닌가요 ?

djm03178   6년 전

메모리 구조에서 지역변수는 스택 영역에 할당되는데, 스택 영역의 크기는 보통 제한되어 있습니다. 리눅스의 경우 기본값이 8MB라고 알고 있고, 윈도우즈의 경우는 1MB라고 합니다. arr[100000]; 가 80만 바이트에 str가 30만 바이트니까, 110만 바이트면 1MB가 조금 넘습니다. 이 때문에 스택 오버플로가 발생합니다.
하지만 전역변수는 힙 영역에 할당되기 때문에 이러한 제한이 없고, 따라서 문제를 일으키지 않습니다.

kimsy96   6년 전

아 그렇군요 감사합니다.

kimsy96   6년 전

아 그런데 저 코드에서

math.h 헤더파일 인클루드하고 abs()를 사용했는데 visual studio 상에서는 warning이 하나도 뜨지않았는데

codeblock 에서는 implicit declaration of function 'abs' [-Wimplicit-function-declaration] 이라는 문구가 뜨네요.. (error 는 아니고 warning이라 뜨네요) 혹시 왜 그런지 아시나요  


chogahui05   6년 전

흐음.. 글쎄요. 혹시 c++로 컴파일 하셨나요?

c++에는 abs 함수가 2개 있어요. cstdlib에 있는 거랑 cmath에 있는 거랑.


c 같은 경우에는..

http://www.cplusplus.com/refer...

kimsy96   6년 전

저 코드 그대로 비쥬얼스튜디오에서도 돌려보고 코드블록에서도 돌려봤는데 저렇게 뜨더라고요. 헤더파일 문제였다면 visual studio 상에서 오류메세지가 떠야하지않을까..하긴하는데 음 잘모르겠네요 


chogahui05   6년 전

그게 abs가 정수형을 인자로 받는 게 stdlib.h에 있어서 그래유..

kimsy96   6년 전

머리가 왤케 나쁜지..

감사합니다. 구현은 다 한거같은데 시간오버때문에 계속풀고있네요

댓글을 작성하려면 로그인해야 합니다.