해결된 질문
작성
·
89
0
강의를 보다가 동적할당한 영역 이상으로 값을 넣고 동작시 Free 부분에서 디버그 에러가 발생하는것을 보여주셨는데,
Free가 정상적으로 동작하지 않고 끝나는것처럼 보입니다.
그렇다면 메모리에 할당후 값을 넣은 부분은 계속 메모리에 남아있게 되는건가요?
다른 프로그램에서 메모리를 덮어쓰거나 해당영역을 초기화 하지 않는이상 남아있을 것으로 판단되네요
답변 2
0
네, 남아 있게 됩니다. 단, 그 메모리 영역이 사용가능하여야 합니다. 그렇지 않은데 접근했다면 메모리 접근 오류가 발생할 것인데 이는 접근 시점에 결정되므로 접근 시 쓰기 오류가 없었다면 해당 메모리에 저장된 값은 다른 원인으로 변경되기 전까지 내용이 유지됩니다. 단, 이는 다른 프로그램에서 메모리를 덮어 썼을 가능성은 고려대상이 아닙니다. 통상적인 환경에서 프로그램들이 사용하는 메모리는 OS가 제공하는 가상 메모리 시스템으로 보호되기 때문입니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
giup gun님께서 메모리 동적 할당 후 메모리 오버플로우 및 그에 따른 free
함수의 동작에 대해 궁금해하시는 것 같습니다. 동적 메모리 할당과 관련하여 이런 상황에 대한 답변이 있는 유사한 사례를 찾아보았습니다.
메모리를 동적 할당한 후 설정된 크기 이상으로 데이터를 저장하면 그 위치의 메모리가 다른 프로그램이나 운영체제에 의해 덮어쓰이거나, free
함수 호출 시 충돌이 발생하는 경우가 많습니다. free
함수는 할당됐던 메모리를 해제한다는 의무는 있으나, 이미 오버플로우가 발생해 다른 메모리 영역을 침범했을 경우 의도치 않은 문제를 발생시킬 수 있습니다.
이와 관련된 유사한 상황의 답변은 아래의 링크들을 참고해보시기 바랍니다:
메모리 할당 해제 방법에 대한 질문
메모리 할당 해제 방법에 대한 질문
이 답변에서는 malloc
함수로 메모리를 할당받을 때와 free
로 해제할 때의 원리를 설명하고 있습니다. 운영체제가 메모리를 어떻게 관리하고, free
함수가 어떻게 작동하는지를 이해하는 데 도움이 될 것입니다.
memcpy 사용 후 free 함수 사용여부
memcpy 사용 후 free 함수 사용여부
이 질문에서는 memcpy
사용 후 free
함수의 해제 문제에 대한 논의가 있습니다. 원래 할당된 크기 이상의 영역에 접근하는 것은 내부적인 메모리 관리를 복잡하게 만들 수 있습니다.
물론, 운영체제 및 환경에 따라 이와 같은 문제를 바로 잡기 위한 다양한 메모리 보호 기법이 있으므로, 이러한 오류가 발생하지 않도록 주의 깊게 프로그래밍해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.