본문 바로가기

C언어/C언어 문법

[C언어] 포인터 선언과 메모리 관리

728x90
반응형

포인터 변수 선언

 

포인터 변수를 선언할 때 아래와 같은 형태로 선언을 할 수 있다.

 

#include <stdio.h>

struct Box
{
    int width;
    int height;
    int length;
};

int main()
{
    struct Box* box_a;
    box_a.width = 10;
    box_a.height = 20;
    box_a.length = 20;
    return 0;
}

 

그러나 위 코드처럼 선언한 포인터 변수를 바로 사용하게 되면 메모리 에러가 발생할 수 있다.

 

포인터 변수를 선언하면 변수의 주소를 담기 위한 8byte의 공간을 할당할 뿐

구조체의 메모리 공간은 따로 할당하지 않기 때문이다.

 

따라서 포인터 변수를 선언하고 해당 포인터 변수가 가리키는 주소에 메모리를 할당해 주는 작업은 따로 진행해야 한다.

 

#include <stdio.h>
#include <stdilb.h>

struct Box
{
    int width;
    int height;
    int length;
};

int main()
{
    struct Box* box_a = (struct Box*) malloc(sizeof(struct Box));
    if (box_a == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }
    box_a.width = 10;
    box_a.height = 20;
    box_a.length = 20;
    return 0;
}

 

따라서 위 코드처럼 사용하는 것이 옳다.

 

 

 

그러나 아래 코드는 문법적인 오류가 발생하지 않는다.

 

#include <stdio.h>

int main()
{
    char *str;
    str = "Hello, World!";
    return 0;
}

 

문자열을 전달할 때에는 메모리 공간에 먼저 문자열이 저장되고 해당 문자열의 주소를 전달하는 형식이기 때문에

포인터 변수에 문자열을 넣었으므로 문법적으로 오류가 발생하지 않는다.

 

 

 

 

728x90
반응형