버그로 인한 메모리 오염, 즉 예상되지 않은 메모리 값 변경, 참조 등에 의해서 발생한다.
원인을 다양한데 대부분 안전하지 않은 함수의 사용, 잘못된 함수 사용, 잘못된 포인터 사용 등 프로그래밍 실수로 인해서 발생한다.
실수로 사용중인 메모리를 다른 엉뚱한 곳에서 메모리를 덮어쓴다거나 들어가지 말아야할 메모리 주소에 데이터가 들어가는 것을 의미한다.
Memory corruption이 발생했을때 이 메모리에 잘못된 값이 쓰여졌다는 것은 바로 알 수 있지만 이 잘못된 값이 어디서 온 것인지 알기가 쉽지 않다.
왜냐하면 사용중인 메모리에 다른 값이 쓰여졌을 당시에는 문제가 발생하지 않고 이후에 덮어씌워진 메모리를 다시 사용할 때가 되어서야 에러가 발생하기 때문이다.
만약에 운이 나쁘다면 디버그 중에는 그 잘못 쓰여진 메모리를 다시 사용하는 일이 발생하지 않다가 프로그램을 릴리즈하고 출시한 이후에 실제 버그가 발생하는 경우가 있을 수 있다.
그렇게 되면 구매자는 언제 터질지 모르는 시한폭탄같은 프로그램을 구매하게 된 것이고 곧바로 화를 내며 환불을 요구하게 될 것이다.
출시한 이 후에야 버그 리포트를 받은 프로그래머 역시 멘탈이 무너질 것이 분명하고... 이 문제를 해결하는 것은 매우 힘들 것이다.
그리고 멀티 쓰레딩을 하면서 여러 쓰레드에 한 메모리에 접근하는 상황이면 더욱 복잡하다.
포인터를 잘못 다뤄서 이런 문제가 발생하는 경우가 많기 때문에 항상 포인터를 다룰 때는 조심해야 한다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'프로그래밍' 카테고리의 다른 글
[VisualStudio] An exception has been encountered. This may be caused by an extension. 에러 발생시 해결 방법 (0) | 2017.07.11 |
---|---|
[프로그래밍] Visual Studio 2017 Community 설치 실패 문제 해결하기(Error 0x80004003:) (0) | 2017.06.09 |
[프로그래밍] 악마의 문법, goto (0) | 2017.06.01 |
[프로그래밍] 프로그래밍 입문자들이 느끼는 어려움에 대하여 (8) | 2017.05.02 |
[프로그래밍] Debug 빌드를 유지하자 (0) | 2016.11.01 |