해결된 질문
작성
·
38
0
예제를 거의 똑같이 구현했는데 환영큐로 구현을 한게 아닌 배열형태의 큐로 사이즈를 100을 줬는데 100개를 넘게 입력해도 정상작동을 합니다 왜 이런건가요?
답변 2
0
배열 같은 메모리 덩어리를 선언해 사용해보면 실제로 잡히는 사용가능 영역은 똑같거나 약간 큽니다. 이유는 메모리를 일정 단위 덩어리로 잘라서 관리하기 때문입니다. 가령 4KB 단위로 메모리가 관리될 경우 단 1바이트만 확보해도 일단 4KB 공간이 잡힙니다. 그리고 C언어는 메모리를 응용 프로그램이 직접 관리하거나 접근할 수 있다보니 경계를 일부 벗어나더라도 문제 없이 잘 작동하는 것입니다.
아무튼 경계를 벗어난 I/O는 매우 위험한 것입니다. 잘 돌아가는 것처럼 보이는 것은 컴파일 타임에 오류로 발견되는 것과 비교 할 수준이 아닙니다. 참고하시기 바랍니다. 😄
참, 매우 좋은 질문이라는 점도 꼭 말씀드립니다.
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문 내용에 따르면, 크기를 100으로 설정한 배열 기반의 큐에 100개 이상의 요소를 추가했는데도 프로그램이 정상적으로 작동하는 현상에 대한 궁금증을 가지고 계신 것 같습니다. 이는 여러 가지 이유로 발생할 수 있습니다.
오버플로우 방지 로직: 구현하신 큐에 100개를 초과하여 요소를 추가할 시 요소 추가를 거부하거나, 다른 방식으로 오버플로우를 방지하는 장치가 내장되어 있을 수 있습니다.
언어 또는 환경의 메모리 관리: 사용하신 프로그래밍 언어나 실행 환경에서 배열이나 메모리 할당을 관리하는 방식에 따라, 실제 메모리에서는 더 많은 공간을 유동적으로 할당하여 크기를 초과한 요소를 수용할 수 있습니다. 하지만 이는 예상치 못한 동작을 초래할 가능성이 있으므로, 바람직한 방법은 아닙니다.
인덱스 관리 문제: 배열 인덱스를 관리하는 로직에 오류가 있을 경우, 배열의 크기를 초과해도 에러가 발생하지 않고 작동할 수 있습니다. 이 경우, 데이터가 덮어쓰여지거나 메모리의 다른 부분을 침범할 수 있으므로, 문제의 원인을 파악하여 수정이 필요합니다.
정확한 원인 파악을 위해서는 구현하신 큐의 소스 코드를 검토하는 것이 가장 좋은 방법입니다. 배열 크기를 초과하는 요소 추가에 대한 처리 방식을 확인하고, 오류 가능성이 있는 부분을 점검해보세요.
도움이 필요하시면 추가적인 코드 정보와 함께 구체적인 질문을 주시면 더 자세한 답변을 드릴 수 있을 것입니다.