C 구조체 포인터 정렬 segmentation fault 질문

조회수 1054회

이미지

Record *record[] 라는 구조체 포인터를 정렬해주는 함수입니다. 그런데 메모리의 잘못된 사용이 전혀 안보여서 이렇게 질문드립니다. 여기서 왜 segmentation fault가 뜨는지요?? 다른 함수는 다 제대로 작동하는데 오직 이 함수만 들어가면 segmentation fault가 뜹니다... 도와주세요ㅠㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 코드는 스크린샷 말고 텍스트로 올려주세요. 안그러면 답변자가 코드를 눈으로만 보거나 직접 타이핑을 해야 하니까요. 편집요청빌런 2020.4.9 17:23

2 답변

  • #include <stdio.h>>
    int main(void)
    {
        int a[5] = {1,2,3,4,5};
        int i,j;
        for(j=0; j<5; j++) 
        {
            printf("%d\n",a[j+1]);
        }
    }
    //결과
    2
    3
    4
    5
    0 // overflow!!
    

    제가 볼때 위에 쪽답처럼 2중 for문 내에서

    records[j+1]에 대해서 참조할때 해당 내용에 대해서 오버플로우 발생해서

    segmentation fault 가 발생하지 않았나 싶습니다.

    • 일부추가) 읽어올때는 문제가 안됩니다. 할당되지 않는 공간에 쓰려고 할때 발생하지용! records[j+1] = temp 처럼요
    #include <stdio.h>>
    int main(void)
    {
        int *a[5] = {1,2,3,4,5};
        int i,j;
        for(j=0; j<5; j++) 
        {
            *a[j+1]='3';
        }
    }
    
    //signal: segmentation fault (core dumped)
    
  • 김호원님의 지적도 문제가 될 부분 같고, 더 문제가 되는 부분은 아랫부분 같습니다.

    for( j = 0; i<count ; j++)
    

    여기서 j 가 무한하게 증가하겠습니다.

    이런 부분은 디버그모드로 실행해 보고 죽었을 때의 로컬변수값들만 잘 들여다 보면 혼자서 해결될 부분 같아요. 사실 프로그램이 죽는 문제가 가장 원인이 확실하게 나올 때가 많죠.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)