아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


머쓱한게262

머쓱한게262

포인터 변수 선언 후 메모리할당을 하는 이유

라이브러리 분석중입니다.

포인터 변수 선언 후 malloc이나 calloc을 사용하여 메모리를 할당하는 이유가 무엇인지 궁금합니다.

주소만 매핑하고 굳이 메모리할당을 할 필요가 없을 것 같은데 말이죠.

답변 부탁드립니다

    2개의 답변이 있어요!

    • 팔팔한칼새6

      팔팔한칼새6

      메모리를 할당해야 해당 메모리 주소값이 리턴 되어 그걸 포인터에 담으실텐데

      주소만 매핑 한다는게 어떤 말씀인지 잘 모르겠네요.
      참고로 주소는 String이 아니라 실행하는 컴퓨터마다 다 다릅니다.

      단순히 기존 포인터를 새로운 포인터에 담는거면 안 해도 됩니다.
      그러나 해당 메모리에 있는 데이터를 복사해서 사용하려면 새로운 공간을 만들어주어야 하니
      새로 메모리를 할당합니다. 그냥 새로운 포인터 값에 넣고 값 조정하면 원본 값도 달라져요.

    • 포인터는 특정주소를 가리킬 수 있는 변수입니다.

      로컬변수나, 글로벌변수도 역시 가리킬수 있지요. 로컬변수는 변수가 유효한 범위를 벗어나면 자원이 사라지고, 글로벌변수는 프로그램종료시까지 자원이 존재합니다.

      말씀하신 부분은 위와는 달리 heap이라는 영역에 메모리를 동적으로 할당하고, 이 할당한 메모리에 접근하기 위한 포인터입니다. 해당포인터를 이용하여 메모리를 동적으로 할당하고, 할당한 메모리에 접근하거나 할당했던 자원을 해제할수있습니다.