C++ core dump 에러가 발생합니다.

조회수 14793회

어떠한 최솟값과 최댓값을 알고 있을 때, 이것들을 포함하여 그 사이의 모든 정수들을 배열에 저장하려고 합니다.

#include <iostream>
#include <vector>

int main() {
    std::vector<int> arr = { 0, };
    int min = 2;
    int max = 8;
    int idx = 0;

    for (int i = min; i <= max; i++) {
        arr[idx++] = i;
    }

    std::cout << arr[0] << "\n";

    return 0;
}

위 코드를 컴파일하면

main: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)

이런 에러가 나면서 arr[0]의 값이 출력되지 않습니다. 오류 메시지 해석조차 어려운데 어떻게 해결해야 하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • vector 생성 시점에 size/capacity 가 1인 벡터를 만드셨는데

    for 문을 돌면서 vector range(capacity) 밖의 인덱스에 접근(arr[idx++])하여 할당하기 때문이 아닌가 싶은데요.

    arr을 만드실 때 사이즈를 알 수 있으므로 미리 공간확보를 하도록 만들거나

    std::vector<int> arr(max - min + 1);
    

    아니면 동적 할당을 위해 arr[idx] = value;으로 값을 assign 하지 말고 arr.push_back(value);을 사용하시는 건 어떨까요?

    • 답변 감사합니다. 그리고 벡터 배열은 {0,}을 대입하면 0으로 초기화되는 게 아니라 그냥 0번 인덱스에 0이 삽입되어 버리네요. 벡터는 초기화 방법이 따로 없는 건가요? 알 수 없는 사용자 2018.9.11 09:57
    • 제가 공간확보를 위해 쓴 문법이 초기화 선언 문법입니다. `std::vector arr(5);` <= size() 가 5인 벡터이며 원소는 0으로 채우는 거죠. 시도해 보신건 직접 벡터 원소들을 나열하여 할당한 거고요. doodoji 2018.9.11 11:02

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

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

(ಠ_ಠ)
(ಠ‿ಠ)