이런건 처음 겪는데요
환경은 win7+VS2010 , 언어는 c++ 입니다
주변에 어떤 요소도 간섭하지 않고 (다중스레드 같은것도 아니고)
딱, 아주 기본적인 이 코드 입니다
int a = 5;
for(int i = a/2-1; i >= 0 ; i--)
function(i);
그런데 저 함수내에서 배열의 인덱스로 i 인자를 받아 쓰거든요
여기서 자꾸 excess violation 런타임 오류가 나서 디버그 모드를 돌려봤더니
a 는 5라고 제대로 들어가있는데
i 값이 196066 ... 이 들어가 있는겁니다. 대체 이유를 모르겠습니다. 이런것 처음 겪네요;
왜 이런걸까요. 뭔가 놓치고 있는것이 있는지 참;
제가 알기로는 for문 내에서 선언된 변수값은 외부로부터 blind 인데 말이죠(지역변수처럼)
아래는 디버그 모드 돌려본 결과 스샷입니다.
redThirteen // 답변 감사합니다
아.. 배열을 이상한걸 넣고선 한참 헤맸네요; function() 은 minheap 을 만드는 함수인데 내용이 길어서요;
그런데 코드 내에선 계수 변수 i 에 대한 연산을 하지 않는데 왜 영향을 받는지 여쭤봐도 될까요?
로컬변수는 스택에 생성됩니다.
for 루프 내에서 생성하는 i 변수도 스택에 생성되고, function에 넘기는 파라미터도 스택에 집어넣고, function에서 생성한 로컬 변수도 스택에 집어넣습니다.
따라서, 이런 변수(인수, 로컬변수 등)를 사용할때 포인터 연산을 잘못한다거나, 선언한 배열 길이 이상을 써버리게 되면 스택상의 다른 변수들을 침범하여 스택을 깨버리게 됩니다. 어떤 경우에는 리턴 주소가 깨지기도 하고, 전혀 엉뚱한 동네에서 에러가 나기도 하죠.
function() 함수 안에 뭔가 문제가 있을 확률이 높으니 차근차근 포인터 타입이라던가, 로컬배열/구조체 변수등의 길이를 살펴보시기 바랍니다.
스택이 깨진거 같은데요...
function 안의 내용을 좀더 올려주심이..