본문 바로가기

분류 전체보기99

malloc(): corrupted top size 과제 하던 중에 나타난 malloc(): corrupted top size 에러무슨 에러인고 찾아보니 malloc으로 할당한 동적메모리를 벗어나 메모리를 깨먹어버리는 경우 나타난다고 한다. 쉽게 생각하면 동적메모리의 배열의 인덱스 범위 바깥으로 나가는 경우.정확히는 "C 또는 C++에서 동적 메모리 할당을 사용할 때, 힙(Heap) 메모리가 손상되었을 때 발생합니다.(by ChatGPT)" 라고 한다.에러 발생 코드그럼 어디서 생긴 문제인가 곰곰이 들여다보니 merge sort를 구현하다가 생긴 문제였다.void merge(struct person array[], int left, int mid, int right) { int i, j, k, l; i = left; j = mid+1; .. 2025. 5. 24.
댕글링 포인터 (Dangling Pointer) 포인터가 반납한 메모리 주소를 여전히 가리키고 있다면, 이 포인터를 Dangling Pointer(댕글링 포인터)라고 부른다. ex:C언어에서 동적 메모리 할당(malloc 등)을 받아 사용하다가 해제(free)를 해주었음그러나 운영체제 or vscode 등에서 이미 free 된 메모리조각에 다른 포인터변수로 접근함댕글러 포인터로 인해 발생할 수 있는 문제들1. 예측 불가능한 동작해제한 메모리에 이전에 사용하던 정보가 남아있다면, 의도치 않은 방향으로 프로그램이 흘러갈 수 있음.2. 보안 문제메모리에 이전 정보가 중요한 정보였고, 댕글링 포인터가 사라지지 않은 정보를 가져다 사용할 수 있게 됨. 3. segmentation fault개발 환경과 고객의 컴퓨터 환경 등이 다르기 때문에 개발자 컴퓨터에선 1.. 2025. 5. 23.
C에서 math.h 사용할 때 주의할 점 여기 참고"" sqrt() 함수를 사용하기 위해서는 컴파일 시 -lm 옵션을 사용하여 수학 라이브러리를 링크해야 한다 (일부 컴파일러 및 환경에서 필요). 예를 들어, gcc 컴파일러를 사용하는 경우, 컴파일 명령은 gcc -o program program.c -lm 이런 식으로 됨. ""-lm 을 붙이지 않으면?>> 당연히 오류calculate_distance 함수에서 pow, sqrt 함수 모두 잘 안 돌아간다. 이때 뒤에 -lm 을 붙이면 해결이 된다.float calculate_distance(struct point p1, struct point p2) { int x1, x2, y1, y2; x1 = p1.xpos; y1 = p1.ypos; x2 = p2.xpos; .. 2025. 5. 22.
격자(grid)에서 분리 집합을 적용하기 위한 방법 분리집합 문제를 풀다가 격자에 적용할 상황을 맞딱뜨림.고민해보다가 class 노드를 만들어서 관리하려 했지만 더 간단한 방법이 있을 것이라 판단하고 서칭함.서칭을 해도 기본적인 이야기만 하길래 지피티랑 얘기 나눠보고, 그 방법을 정리함. 분리 집합?1~N 까지의 노드가 존재 각 노드는 자기 자신만 있는 트리임union, find 연산으로 두 노드가 공통된 트리에 존재하는지 빠르게 확인할 수 있음.union : 두 노드를 합침find : 노드의 최고 조상 노드를 탐색그럼 '노드가 가지고 있는 정보가 여러 개(i, j) 일 때는 어떻게 처리를 해주어야 할까?' 에서 출발함 결론부터 말하면 r, c 격자가 있을 때, 격자의 각 셀을 하나의 노드(집합)로 모델링함.각 셀을 하나의 노드로 모델링 하는 방법은 (i.. 2025. 5. 21.
중위표기식을 후위표기식으로 변환하기 (Java) 표기식(expression)* 중위표기식(A+B)-C*D/E 처럼 연산자가 직접 연산하는 피연산자 사이에 위치하는 표기식* 후위표기식AB+CD*E/- 처럼 피연산자 뒤에 연산자가 위치하는 표기식배경지식중위표기식을 후위표기식으로 변환하려면 연산에 대한 '우선순위'를 알아야 한다.우선순위는 다음과 같다.소괄호중괄호대괄호^, *, / __제곱, 곱셈, 나눗셈+, - __ 덧셈, 뺄셈소괄호 안에 있는 식을 계산하고, 다음으로 중괄호 안에 있는 식을 계산하고, 다음으로 대괄호 안에 있는 식을 계산한다.변환 방법피연산자는 바로 출력한다.여는 괄호를 만나면 stack에 push 한다.^, *, / 피연산자를 만나면 stack의 peek가 자신과 같은 우선순위인지 파악하고, 같다면 pop을 한 번 하고, 자신을 pus.. 2025. 4. 12.
백준 11505 - 구간 곱 구하기 (Python3) https://www.acmicpc.net/problem/11505💡 해결방법구간 곱을 다루는 세그먼트 트리를 구현해서 문제 해결👀 풀이세그먼트 트리로 초기화하는 메서드기존 값을 변경해주는 메서드입력된 구간 내의 곱을 반환하는 메서드를 구현하여 정해진 쿼리를 처리한다.특징으로는 기존 값을 원래는 내려가면서 업데이트를 했다면, 이번에는 말단 노드에서 시작해서 루트 노드까지 올라오며 update를 한다.🧾코드import sysinput = sys.stdin.readlinemod_value = 10**9+7N, M, K = map(int, input().split())arr = [int(input()) for _ in range(N)]tree = [0] * (N*4)def init(start, end, .. 2025. 3. 31.
[G1] 백준 2042 - 구간 합 구하기 (Python3) https://www.acmicpc.net/problem/2042💡 해결방법세그먼트 트리를 구현하고 정해진 명령어대로 수행한다.🧾코드# 2042 구간 합 구하기import sysinput = sys.stdin.readlineN, M, K = map(int, input().split())arr = [int(input()) for _ in range(N)]tree = [0] * (N*4)def init(start, end, idx): if(start == end): tree[idx] = arr[start] return tree[idx] mid = (start+end) // 2 tree[idx] = init(start, mid, idx*2) + init(mid+1,.. 2025. 3. 29.
Segment Tree(세그먼트 트리) (Python3) 세그먼트 트리란?세그먼트 트리는 구간의 정보를 알고 싶을 때 사용하는 트리입니다.각 노드는 자식 노드의 정보를 연산한 값을 저장하고 있습니다. 이 특징으로 구간의 사칙연산, 최대·최솟값 등을 구할 때 자주 사용한다고 합니다. 개발자는 배열 혹은 리스트에서 부분의 합 정보를 알고 싶습니다. 그래서 선형 탐색으로 접근을 하고, 구간이 일치한다면 그 정보들을 하나하나 가져옵니다. 이것은 구현이 쉬우나, O(N)의 비용이 발생합니다. 세그먼트 트리의 노드는 부분의 정보를 저장하고 있습니다.말단 노드(leaf node)에 접근하면, 배열의 원소 값과 일치합니다.하지만 말단 노드의 부모 노드 부터는, 자식 노드의 정보를 합한(혹은 빼거나 곱하는 등) 값을 저장하고 있습니다.그래서 필요한 구간의 노드를 찾아내면 원하.. 2025. 3. 29.