Taking baby-developer steps

C언어_자료구조 - 2. 배열기반 리스트 - 특정한 위치에 원소를 추가하는 addAt()함수 본문

Logs/학습 log

C언어_자료구조 - 2. 배열기반 리스트 - 특정한 위치에 원소를 추가하는 addAt()함수

Surin Lee 2021. 4. 4. 19:57
#include<stdio.h>
#define INF 10000

int arr[INF];
int count = 0;

void addBack(int data){
    arr[count] = data;
    count++;
}

void addFirst(int data){
    for(int i = count; i>=1; i--){
        arr[i] = arr[i-1];
    }
    arr[0] = data;
    count++;
}

void removeAt(int index){
    for(int i = index; i<count; i++){
        arr[i]=arr[i+1];
    }
    count--;
}

void addAt(int index, int data){
    for(int i=count; i>=index; i++){
        arr[i]=arr[i-1];
    }
    arr[index] = data;
    count++;
}

void show(){
    for(int i=0; i<count; i++){
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main(void){
    addFirst(4);
    addFirst(5);
    addFirst(1);
    addBack(7);
    addBack(6);
    addBack(8);
    show();
    removeAt(4);
    show();
    addAt(3,0);
    show();
    system("pause");
    return 0;
}
1 5 4 7 6 8
1 5 4 7 8
세그멘테이션 오류 (core dumped)

특정한 위치의 원소를 삭제하는 removeAt() 함수를 구현한 후, 특정한 위치에 원소를 추가하는 함수를 구현해 보면 어떨까해서 addAt()이라는 index와 data, 두개의 인자를 받는 함수를 만들어 봤다. 디버그 단계에서는 오류가 발생하지 않았으나, 실행하니 세그멘테이션 오류가 발생하는 것을 볼 수 있었다.

main함수에서 마지막 show()함수 실행을 지웠을 때도, 디버그 후 실행시 세그멘테이션 오류문구가 출력되는 것을 보아, addAt()함수를 정의하는데 있어서 오류 혹은 충돌이 일어날 만한 구간이 있었던것 같다.

학습을 진행 하면서 이 오류가 왜 일어 났는지, 바로 잡으려면 어떻게 해야하는지를 알아내면 답하는 형식으로 포스팅을 보완할 예정이다. 

'Logs > 학습 log' 카테고리의 다른 글

2022.01.27. gnl  (0) 2022.01.27
2022.01.26. gnl과제 하는 중...  (0) 2022.01.26
2022.01.25. 학습 log  (0) 2022.01.25
2022.01.24. 학습 log  (0) 2022.01.24
자료구조 3 -> 새그먼트 오류  (0) 2021.04.06
Comments