han030425   1년 전

코드를 실행시킬때 예제를 입력하면 멀쩡히 값이 나오는데, 제가 따로 값을 입력하면 

Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1ae58cbb0) 이런 오류가 뜨네요 이유가 무엇이고 어떻게 해결해야 하나요?

pill27211   1년 전

Stack around the variable 'xxx' was corrupted

해당 메시지는 스택이 깨졌을 때 -> 지역 변수의 주소를 통해 해당 주소에 무언가를 기록하려 할 때 지정된 크기를 넘어서 기록하려는 상황에서 발생 합니다.

str은 9만큼 할당 되었고 val값은 세자리 수 * 세자리 수 * 세자리 수이므로 8자리 혹은 9자리가 될 수 있습니다.

이 때 c언어 문자열의 특성으로 맨 끝에 '\0'이 삽입된다는 것을 아실텐데요, 8자리일 때는 str이 9만큼 크기를 가져도 (문자열 변환시) 8자리 + '\0'으로 공간상의 문제가 없습니다.

하지만 val이 9자리가 되는 경우 9자리 + '\0'으로 총 10만큼의 공간이 필요한데 str은 9만큼 할당 되었기 때문에 공간상의 문제가 발생합니다. 즉 해결법은 간단합니다. 

str의 크기를 '\0'까지 생각해서 10만큼 할당하면 됩니다.

han030425   1년 전

조건에 널문자를 걸어놓고 널문자의 공간을 할당해주지 않아서 발생한 문제였군요! 

정말정말 감사합니다!!!!

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