동적할당시 배열의 값이 변하는 문제
글쓴이: 지재민@Google / 작성시간: 목, 2017/04/13 - 6:12오전
재귀함수에 들어가면 스택이 점점 쌓이는걸로 알고 있고
동적할당은 힙영역이라고 알고있습니다.
스택이 계속 쌓이다가 힙영역에 들어가면 메모리 오버플로우가 생길텐데,
혹시 에러가 발생해도 프로그램이 종료되지않고 계속 실행되는 경우가 있나요?
동적할당한 배열(전역변수)이 재귀함수를 돌면서 값이 변하는데
어떤 이유로 이런 상황이 발생할 수 있는지 궁금합니다.
Forums:
문제가능성이 있습니다.
일단 재귀를 돌면서 그 안에서 무언가를 하고 메모리 값이 바뀌는데
너무 재귀를 많이 돌아버리면 당연히 지정된 Stack size을 초과해서 메모리를 쓰게 됩니다.
그럼 건들면 안되는 메모리 영역을 건들게 되죠..
비슷한 예?로 Buffer over flow도 뭐..비슷한..?뭐 그런 개념입니다.
Windows Visual studio 에서는 Stack을 넘어서면 오류를 띄우는 옵션이 있는걸로 아는데
컴파일러마다 달라서 오류 없이 그냥 돌다가 어디선가 잘못되서 자기 혼자 죽는 경우도 있습니다.
재귀 함수는 조심하고 꼭 최대 depth을 정해놓는 등 잘 설계해서 써야 합니다..
잘 모르는 학생입니다 ㅎ.ㅎ
저는 아직 학생이라 학교에서 배운건 이론으로는 Stack 영역과 Heap 영역은 서로 증가하면서 만난다고 하지만
VS 윈도우 7 에서는 서로 증가하면서 멀어지는 구조더라구요. OS나 컴파일러마다 다르겠지만
꼭 만난다는건 아닌거같아요
전역변수를 저장하는 공간은 따로 있는걸로 알고있는데
그공간을 동적할당하면 어떻게 되는지 아래에 고수님들 답변하시겠죠 ㅎㅎ..
참고해보세요.
0.
학원. 직업학교. 기업. 전문대. 대학교. 카페. 동아리. 도서관. 서점. 책. 등에 문의하거나. 참고해보세요.
0.
재귀 호출 없는 함수 사용 방법이 있습니다.
https://drive.google.com/folderview?id=0B_788O9A9oekR1NzVWZ0b0p4YTg&usp=sharing
기능과 원리로 배우는 프로그램항목.zip
- 데이터
- test 재귀호출을 사용하지 않고. 모든 파일 폴더 경로 리스트박스에 보여주기
1.
배열 데이터의 범위를 넘을 경우. 오류가 발생합니다.
2.
예외 처리를 하지 않는다면. 혹은 하더라도.
if() 도 넘어가는 문제가 발생할 수 있습니다.
3.
메모리 릭'을 확인해보거나. 한줄씩 지워서 확인해보는 방법이 있습니다.
4.
그리고. 변수 뿐 아니라. 각 함수마다. 인자값. 리턴값. 오류값을 모두 확인해보셔야 합니다.
5.
꼬리 재귀 최적화(Tail-recursion Optimization)
https://kldp.org/node/153435#comment-612848
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=961173&ref=961173&page=1
6.
재귀 호출이 필요없는 Javascript 객체 보는 방법
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기