TIL - 동적 메모리 할당, 구조체 접근, 배열

손찬호·2024년 4월 12일
0

TIL

목록 보기
14/21

동적 메모리 할당

동적 메모리 할당은 '런타임 시에 메모리를 할당하는 것을 말한다.'
런타임 시에 계산시 잠깐 쓰고 계산이 끝나면 지워버려도 되는 메모리를 사용할 때 주로 사용한다.

정적 메모리 할당

정적 메모리 할당은 '컴파일 시에 메모리를 할당하는 것을 말한다.'
메모리를 얼마나 사용할지 미리 알고 있다면 그 메모리를 정적 메모리로 할당하는 것이 유리하다.

동적 할당 메서드

malloc()

-> 쓰레기값을 남긴 채 메모리를 할당한다.

calloc()

-> 모든 값을 0으로 초기화한채 메모리를 할당한다.

realloc()

동적할당한 메모리의 크기를 줄이거나 늘리는 용도로 사용한다.

메모리 누수

#include <stdlib.h>

int main() {
    int *ptr = (int*)malloc(sizeof(int)); // 동적 메모리 할당
    *ptr = 10; // 할당된 메모리에 값 할당

    // 메모리 해제를 하지 않음
    // free(ptr); // 이 코드를 추가하여 메모리 누수를 방지할 수 있음

    return 0; // 프로그램 종료 시 할당된 메모리가 해제되지 않아 메모리 누수 발생
}

동적 할당한 메모리 지우기

free(동적할당한 포인터변수)

구조체

구조체(structure type)란 C언어의 기본 타입을 사용해 새로운 타입을 만든 것을 말한다.
LinkedList를 표현한 예제를 사용해보았다.

typedef struct _listnode
{
	int item;
	struct _listnode *next;
} ListNode;

typedef struct _linkedlist
{
	int size;
	ListNode *head;
} LinkedList;	

구조체 접근

구조체 변수에 접근하는 방법은 크게 2가지가 있지만
용도에 따라 다르게 사용해야한다.

.

구조체 멤버 변수에 직접 접근할 때 사용한다.

->

구조체 멤버 포인터 변수에 접근할 때 사용한다.

예제 코드

#include <stdio.h>

// 구조체 정의
struct Person {
    int age;
};

int main() {
    struct Person tom; // 구조체 변수 선언
    struct Person *tom_ptr; // 구조체 포인터 선언

    tom.age = 30; // '.' 연산자를 사용하여 구조체 멤버에 접근
    tom_ptr = &tom;

    printf("tom의 나이: %d\n", tom.age); // '.' 연산자 사용
    printf("tom_ptr을 통한 나이: %d\n", tom_ptr->age); // '->' 연산자 사용

    return 0;
}

배열

#include <stdio.h>
int main(){
    int arr[4];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 4;

    int arr[4][4];
    
    printf("%d\n",*(arr + 3)); // arr[3]의 값을 출력
    printf("%d\n",*(arr + 4)); // arr를 벗어난 주소의 값을 출력
    return 0;
}
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보