Out Of Bound

@Super_E끌림·2024년 5월 18일
post-thumbnail

이번 내용은 백준 문제를 이용하여 썼습니다.(baekjoon 10871번)

하지만 이 오류는 c언어 배열에 대한 전반적인 오류입니다.



☑️Out Of Bound란?

segmentation fault에서도 말했다시피 배열에 대한 오류로 대부분 비슷한 원인이 발생한다.



그럼 이제 코드로 봐보겠습니다.



문제는 이렀고

코드는 이렀습니다.


#include <stdio.h>

int main(){
    unsigned int n,x;
    int arr[100];

    scanf("%d %d",&n,&x);

    for(int i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    
    for(int i=0;i<n;i++){
        if(x>arr[i])
            printf("%d ",arr[i]);
    }

}

이 코드는 런타임 에러(Out Of Bound)가 발생한 코드 입니다.


🚨발생 원인

문제가 발생한 부분은 간단한 실수인데 배열의 크기를 잘못 지정했습니다.

배열의 크기를 지정하는 n은 범위가 1 <= n <= 10,000 이다.

하지만 저의 코드를 보면

int arr[100];

배열의 크기를 100까지 지정해벼려서

n > 100이면 위에서 처럼 할당한 범위를 넘어버려서

Out Of Bound가 발생합니다.



이 코드를 바르게 고쳐보면

#include <stdio.h>

int main(){
    unsigned int n,x;
    int arr[10000];

    scanf("%d %d",&n,&x);

    for(int i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    
    for(int i=0;i<n;i++){
        if(x>arr[i])
            printf("%d ",arr[i]);
    }

}

문제 해결 :int arr[100]   - - - > int arr[10000]


다음에는 배열에 대해 알아보겠습니다.





profile
SoC:) SoC:)

0개의 댓글