버퍼에 사용한 뒤에 주변의 변수가 달라져요.

jai의 이미지

로컬변수 두개인데요.
char name[64]="test";
char buf[2048];

로 연달아 선언했어요.

buf 를 함수에 인자로 넘겨주고, 함수가 끝나면 아래처럼 name 의 값이 사라져버려요.

name: test name 0x7fbffff6d0 buf 0x7fbfffeed0
name: name 0x7fbffff6d0 buf 0x7fbfffeed0
name: name 0x7fbffff6d0 buf 0x7fbfffeed0

그래서 연달아 있던 name, buf 를 선언 처음과 마지막으로 띄어 놨더니
name: test name 0x7fbffff6d0 buf 0x7fbfffee30
name: test name 0x7fbffff6d0 buf 0x7fbfffee30
name: test name 0x7fbffff6d0 buf 0x7fbfffee30
정상적으로 나오는데요.

영 찜찜한 내용이어서요.
비슷한 경험을 하신 분들이 계시면,
어떻게 해결하셨는지 너무 궁금합니다.
로컬변수 선언할때 조심할게 있을까요?

aqwerf의 이미지

이런 경우는 거의 99%
buf array size를 넘어서 write하여서 그렇습니다.

buf[2048] = 0;
처럼 배열 범위가 넘어간 곳에 써서 그렇습니다.