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
댓글 입력