프로그래밍/나의 디버깅 노트
[C++] 배열을 초기화할 때 할 수 있는 실수
miniOS
2021. 3. 12. 15:50
선언과 동시에 초기화 ( 0 만 가능 )
오늘 백준 11053번 가장 긴 증가하는 부분수열4를 해결할 때, 배열 초기화를 잘못하는 실수를 했다.
앞서 l[1001]배열을 {-1,-1,-1,...,-1}로 초기화 하려고 시도했다.
int a[1001], d[1001], l[1001]={-1,}

하지만 디버깅을 하며 살펴보니 왼쪽과 같이 {-1, 0, 0, ... 0} 으로 초기화가 되어있었다.
왜그런가 찾아보니, c++에서 {n, } 형태로 배열을 초기화 할 때는 n==0인 경우에만 가능하다는 것이였다.
추가) 2차원배열도 똑같은 방법으로 초기화 할 수 있다.
int d[201][201]={0,}
Memset함수 ( 0, -1 만 가능)
-1로 초기화 하기 위해서는
memset(l,-1,sizeof(l));
이렇게 memset을 활용해서 초기화 해야하고, memset함수도 주의해야 할 점이 있는데
초기화할 수 있는 값은 0과 -1만 가능하다는 것이다.
For문 ( 모든 경우 )
그 외의 숫자로 초기화 하기 위해서는 마음 편하게 for문으로 초기화 하는게 나을 것 같다.
for(int i=0; i<n; i++){
l[i]=3;
}