초보입니다. ENDIAN 문제

  • wogkr3654
    wogkr3654

    아무리 고쳐봐도 RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow) 런타임 오류가 자꾸 나오는데 어디서 잘못된건지를 확인할수가 없어요;;

    잘못된 메모리접근인가 해서 봤지만 배열이 크기 이상으로 넘어가도록 하지 않았는데, stack overflow 일 경우는 어떤 경우인가요?? 지금 생각으로는 다중 for문을 형성하게 되어 stack의 용량을 넘어서게 되어 이런 문제가 발생하는 것 같은데 맞는건가요?

    문제를 푼 방법은 바이트별로 따로 변수에 저장해서 시프트연산을 거치고 순서를 바꿔 합치는 방법으로 했습니다.

    도와주세요 형님들, ㅠㅠ

    #include <stdio.h>
    
    int main(void){
    
        int i=0,j=0;
        char shift_index;
        unsigned int byte_buff[4]={0,};
        unsigned int result=0;
        unsigned int a[10]={0,};
        int num;
    
        for(i=0;i<4;i++) //각 바이트마다 따올 수 있도록 변수 만듬{
            byte_buff[i]=(0x000000ff<<(i*8));
        }
    
        do //몇개의숫자를 적을 것인지, {
            scanf("%u",&num);
        }while(num<1 && num>10);
    
        i=0;
        while(i<num)// 각 숫자 입력{
            scanf("%u",&a[i]);
            i++;
        }
        printf("\n");
        for(j=0;j<num;j++) //endian change{
            for(i=0;i<4;i++)
            {
                result |=  (((a[j] & byte_buff[i])>>i*8)&byte_buff[0])<<((3-i)*8);
            }
            printf("%u\n",result);
            result=0;
        }
        return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    문제에 테스트 케이스 개수가 1만개 이하라고 되어있습니다.


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.