본문 바로가기

전체 글539

[C++] Chapter 05. 크러쉬가 나는 오작동 현상 case by case 정수가 오버플로우 0을 나누기 재귀함수를 호출해서 스택 오버플로우 소멸자에 virtual을 쓰지 않아 memory leak이 일어났다 nullptr로 밀어주지 않아 double-free 이미 삭제된 애를 다시 사용하는 use-after-free 2023. 5. 12.
[C++] Chapter 04. 객체지향 여행 객체지향의 시작 💡 절차(procedural)지향 프로그래밍 procedure = 함수 어떤 절차를 지켜야된다의 절차라기 보다는 함수기반이 메인이되는 프로그래밍 방식 C++도 객체지향 프로그래밍이냐? 애매하다 C++에서 C에서 파생되어서 여러 문법들이 추가되면서 생겼다보니까 엄밀히 말해 혼혈화 같은 느낌이다. // 데이터 + 가공(로직, 동작) // 객체지향 = 객체 // 객체란? 플레이어, 몬스터 GameRoom 생성자와 소멸자 // 클래스에 ‘소속’된 함수들을 멤버 함수라고 함 // 이 중에서 굉장히 특별한 함수 2종이 있는데, 바로 [시작]과 [끝]을 알리는 함수들 // - 시작(탄생) -> 생성자 (여러 개 존재 가능) // - 끝(소멸) -> 소멸자 (오직 1개만) 소멸자는 main 함수가 끝난.. 2023. 5. 12.
[STL] 범용 수치 알고리즘(accumulate, inner_product) accumulate 지정한 구간에 속한 값들을 모든 더한 값을 계산한다. 기본적으로 더하기 연산만 하지만 조건자를 사요하면 더하기 이외의 연산도 할 수 있다. accumulate를 사용하기 위해서는 앞서 소개한 알고리즘과 다르게 헤더 파일을 포함해야 한다. inner_product 두 입력 시퀀스의 내적을 계산하는 알고리즘으로 기본적으로는 +와 *을 사용한다. 두 입력 시퀀스의 값은 위치의 값을 서로 곱한 값을 모두 더한 것이 최종계산 값이 된다. 주의해야 할 것은 두 입력 시퀀스의 구간 중 두 번째 시퀀스는 첫 번째 시퀀스 구간 보다 크거나 같아야 한다. 즉 첫 번째 시퀀스 구간의 데이터는 5개가 있는데 두 번째 시퀀스에 있는 데이터가 5개 보다 작으면 안된다. 2023. 5. 12.
[Programmers] Lv 2. 최솟값 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include #include using namespace std; int solution(vector A, vector B) { sort(A.begin(),A.end()); sort(B.rbegin(),B.rend()); return inner_product(A.begin(), A.end(), B.begin(), 0); } GitHub :.. 2023. 5. 12.
[Programmers] Lv 2. JadenCase 문자열 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12951?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include using namespace std; string solution(string s) { string answer = ""; answer = toupper(s[0]); for (int i = 1; i < s.length(); ++i) answer += (isspace(s[i - 1]) && !isdigit(s[i])) ? toupper(s[i].. 2023. 5. 11.
[C++] Chapter 03. 포인터#2 (포인터 vs 배열) 배열 기초 배열의 크기는 상수여야함. (VC 컴파일러 기준. 다른 컴파일러는 상수값이 아니여도 통과될 수 있음) 배열의 이름은 배열의 데이터가 아니라 배열의 시작주소이다. (첫번째 시작주소) 정확히는 시작 위치를 가리키는 TYPE* 포인터이다. 포인터 vs 배열 const char* test1 = “Hello World”; char test2[] = “Hello World”; 둘이 비슷하게 설정된다는 점에서 포인터와 배열이 똑같아보인다고 하지만 이는 전혀 다르다. (둘이 어셈블리 코드도 다름) test1 = “Hellow World”; .data 주소[H][e][l][l][o][][W][o][r][l][d][\0] readonly 데이터임 test1[ 주소 ] char*) 즉 배열의 내용 전체를 넘긴게 .. 2023. 5. 11.
[C++] Chapter 02. 포인터#1 (기초, Reference) 포인터 기초 #1 포인터를 사용하기 전 사용한 방식 int number = 1; number라는 이름의 4바이트 정수 타입의 바구니를 만든다. number라는 변수 스택 메모리에 할당 number = 1라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미. 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈 number는 비유하자면 메모리에 이름을 붙인 것 (찰떡같이 알아들어서) 나쁘지 않고 편리한데, 단점은 원본 수정이 불편하다. 포인터는 바구니는 바구니인데.. [주소를 저장하는 바구니]다. 참고) 포인터는 개발환경이 64비트 32비트냐에 따라 8바이트 4바이트 고정 크기로 설정된다. int value 1 = *ptr 이걸 디스어셈블리로 보면 💡 00344.. 2023. 5. 11.
[C++] Chapter 01. 함수 스택 프레임 int result = MultiPlayBy(b, a) 라고 한다면, 어셈블리 언어로 까보면 오른쪽부터 a를 먼저 push해준다. 지역 변수와 값 전달 데이터 영역에 .rodata, .data, bbs 세가지 영역이 있었음. 초기화 여부, const 등 세부사항에 따라 각 영역에 할당됨 호출스택에서 스택프레임이 구성되는 건 [매개변수][RET][지역변수] 사실 스택이란거 자체는 처음부터 충분히 큰 공간을 할당을 해놓고 시작을 한다. 거기서 각기 함수들이 원하는 영역만큼을 찝어가지고 사용한다. [매개변수][RET] 세팅은 이전 함수에서 정해서 넘겨주게 된다. 지역변수는 온전히 자기 자신이 제어한다. void IncreaseHP(int hp) { int finalHP = hp + 1; } // .. 2023. 5. 11.
[Programmers] Lv 2. 최댓값과 최솟값 https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include #include using namespace std; string solution(string s) { string answer = ""; string tmp; vector v1; for (int i = 0; i < s.size(); i++) { if(s[i] == ' ' ) { v1.push_back(atoi(tmp.c_str())); tmp.cl.. 2023. 5. 10.
[Daily Scrum] Meet 27. 2023-04-20 목요일 시간 : 22:00 ~ 22:30 진행 내용 : Todo list 공유, 내일 학습 계획 공유, 팀원간 소통 개인 학습 내용 : 프로그래머스 Lv2 2문제 풀이 HTML 과제 진행중 2023. 4. 20.