728x90
728x90

동적 할당 4

Visual Studio 디버깅에서 메모리 값 확인하기

포인터, 변수의 주소에 대해서 그냥 책으로 그림만 그려가면서 공부하면지나치게 추상적으로 받아들여지고 실제로 그렇게 작동하는지 의심을 할 수도 있다.실체를 눈으로 보길 원하는 사람들에게 이건 반드시 그렇게 동작한다고 이야기하거나, 그냥 무작정 이렇게 돌아가니까 그런 줄 알고 활용만 잘하면 된다라고 하기보다는 직접 보여주는 게 좋은데, 비주얼 스튜디오(Visual Studio)의 편리한 디버깅 툴을 이용하면 어렵지 않게 실제 메모리에 어떻게 할당되는지 볼 수 있다. #include #include using namespace std; class Student { public: string name; int sNo; void Print(); static int studentNumber; static Stude..

C, C++] 이중 포인터를 이용해 2차원 배열 사용하기

동적 할당을 사용하면 포인터는 배열처럼 사용할 수 있다.여기까진 포인터를 어렴풋이 아는 입문자들도 포인터의 연산과 배열의 인덱스를 연관지어 어렵지 않게 이해할 수 있는 부분인데, 문제는 이중 포인터를 이용해서 2차원 배열을 선언할 때 발생한다. 일단 본론에 들어가기 앞서, 포인터를 이용해서 배열을 사용하는 방법을 그림과 식으로 이해해보자. Cint* ptr = NULL; ptr = (int*)malloc(sizeof(int)*5); C++ int* ptr = nullptr; ptr = new int[5]; 어렵지 않게 요소 5개 짜리 int형 배열을 동적 할당했다. 포인터를 외우듯 공부한 사람들이어도 아래 그림까지는 어렵지 않게 그려내고 이해할 수 있다. 이제 2차원 배열을 어떻게 동적 할당할 지 생각해..

C,C++] malloc과 new의 차이점

C를 배우고 C++로 넘어와서 동적할당을 하다 보면, 아주 자연스럽게 C++에서는 new만 사용하게 된다. 모든 걸 신경 써야 하는 malloc과는 다르게 타입 지정도 필요 없고 할당해버리면 끝인 new만 사용하면 그만이라고 생각하기에는 너무 막연하고 쉽게 넘어가는 것 같아 이 둘의 차이점에 대해서 정리해두고자 한다. malloc은 라이브러리에서 제공하는 함수, new는 연산자다.malloc은 함수로, 원하는 만큼의 메모리를 sizeof()를 이용해 바이트 단위로 할당해 void* 형식으로 반환한다. 그렇기 때문에 적합한 형식으로 지정해주어야 하는 캐스팅 과정이 필요하다.new는, 함수가 아니라 연산자로 메모리의 사이즈와 형식을 지정해 해당 타입의 포인터를 반환하므로, 형식을 지정해주지 않아도 되기 때문..

C++] Vector를 이용한 이중 배열

C++] Vector를 이용한 이중 배열 동적 할당에 대해서 익숙해지면배열을 정적으로 할당하는 경우가 줄어들게 되고거의 대부분 동적으로 할당하게 된다.그렇지 않은 사람들도 있겠지만,나는 변수 사이즈에 따라 배열 크기가 바뀌는 경우 반드시 동적할당을 통해서배열의 크기를 결정 짓는다. 그러다가 STL의 vector라는 걸 알게 되면,동적 할당도 잘 사용하지 않게 된다.구조체가 필요하고 안에 들어가는 변수 관리가 까다로운 경우가 아니면,거의 대부분의 경우 vector를 사용하게 된다.물론, vector에 임의의 구조체를 넣지 못하는 건 아니고그건 순전히 사용하는 나의 숙련도 문제에서 기인한 것이라고 생각된다. Topcoder나 비정기적 혹은 정기적으로 개최되는 코딩 대회에 참가하거나,그곳에서 나온 문제들을 풀..

728x90