본문 바로가기
반응형

cpp4

segmentation fault 2차원 배열을 선언해서 사용하려는데 100*100000의 2차원 배열을 선언하면 segmentation fault가 발생한다. 그럴때에는 stack 영역이 아닌 data 영역에서 선언해주어야 한다. 함수 내에서 선언하는 것은 stack 영역에 할당하게 된다. 반면 global이나 static으로 선언하는 경우는 data영역에 할당한다. 따라서 보통 전역변수로 선언해 주어야 segmentation fault가 발생하지 않는다. 아래는 전역변수로 선언하여 코드를 작성하는 경우이다. 2022. 2. 22.
makefile https://wh00300.tistory.com/193?category=962385 Linux gcc를 이용한 컴파일 / Makefile study(2) 이번에는 makefile을 실제로 작성 해보겠습니다. 먼저 linux환경이 필요한데, linux환경 없이 window만 사용하신 분은 본 블로그의 wsl 설치 포스팅을 참조하시기 바랍니다. pwd에는 다음과 같이 구 wh00300.tistory.com CC:=g++ CFLAGS=-Wall -g TARGET=bin/main SRC_DIRS=src SRCS=$(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp)) OBJS=$(SRCS:.cpp=.o) run: all ./$(TARGET) all: clean $(OBJS).. 2022. 2. 9.
2차원 vector row만 초기화하기 서론 알고리즘을 풀다보면, vector에서 row만 초기화하고 col은 push_back을 사용해야 하는 경우가 생긴다. 코드 아래와 같이 첫번째 인자만 할당해주거나 두번째 인자로 vector만 생성해주면 된다. vector graph(row); vector graph2(row, vector()); 아래와 같은 경우에서 사용할 수 있다. #include using namespace std; int main(){ int numCourses = 2; vector prerequisites = {{1,0},{0,1}}; vector graph(numCourses); for(auto i : prerequisites){ graph[i[0]].push_back(i[1]); } } 물론 2차원 vector의 row, .. 2022. 2. 9.
배열 초기화 0으로 배열을 초기화 하는 방법은 간단하다. 아래와 같이 배열을 생성할때 0으로 초기화해주면 된다. #include #include using namespace std; int main(){ int arr_1d[10] = {0,}; int arr_2d[10][10] = {0,}; //{{0,}} 도 가능하다. return 0; } 하지만 문제는 특정 값으로 한번에 초기화 할 경우이다. 예를 들어 배열을 5로 초기화 하고 싶을 때 위의 방법에서 0대신 5를 넣는다고 한번에 초기화 되질 않는다. 그래서 다음과 같은 방법이 있다. 1. 반복문으로 배열 초기화 가장 많이 사용하는 방법이다. 하지만 타이핑하는데 시간이 조금 걸린다. 1차원 배열 초기화 #include #include using namespace .. 2022. 1. 20.
반응형