본문 바로가기

c

(2)
c - 메모리 할당, 해제, 누수 메모리 할당 메모리에는 정적메모리 영역(stack)과 동적메모리 영역(heap)이 있다. 이때 동적메모리 영역에 직접 데이터를 넣어주는(allocation) 행위을 메모리 할당이라고 한다. malloc() calloc() 등의 함수가 있다. 그외에도 메모리를 재할당 시켜주는 realloc() realloc() 등의 함수도 있다. 메모리 해제 할당된 메모리를 메모리에서 다시 해제시켜주는 행위를 메모리 해제라고 한다. free() 이를 처리해주는 free()라는 함수가 있다. 메모리 누수 사용되지 않는 메모리가 해제되지 않고, 불필요하게 메모리를 점유하고 있는 것을 메모리 누수(leak)이라고 한다. 따라서 메모리 누수를 피하기 위해 malloc()과 free()는 무조건 함께 쓰는 버릇이 중요하다.
c - 포인터 배열과 2차원 배열의 차이 const int nums[5][5] = { {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5} }; 우선 일반 const int 배열을 하나 생성해주었다. const int* nums2[5]; 그리고 포인터 배열을 생성하였다. nums2[0] = nums[0]; nums2[1] = nums[1]; nums2[2] = nums[2];​ 포인터 배열의 윗 값들에 nums배열의 각 값을 대입해준다. 그리고 아래 코드의 값을 보자 printf("%d",nums[2] - nums[0]); /* 10 */ nums[2]에서 nums[0]의 값을 빼주었다. 이때 값은 10이 나온다. offset개념으로 말인즉, nums는 2차원 배열이기 때문에 한 줄에..