malloc 5

[CS50] 연결리스트 : 시연

이번 포스팅에선 저번 포스팅의 내용을 실제 강의에서 어떤 방식으로 학생들이 시연하는지를 보고 이해하는 것이 편할 것 같아 링크를 남깁니다. https://www.boostcourse.org/cs112/lecture/119040?isDesc=false 모두를 위한 컴퓨터 과학 (CS50 2019) 부스트코스 무료 강의 www.boostcourse.org 이 영상을 보고 지난 시간에 코딩했던 코드를 보면 이해가 빠를겁니다. #include #include //지난 시간에 포스팅한 node 구조체 정의 typedef struct node { int number; struct node *next; } node; int main(void) { //list라는 이름의 node 포인터를 정의함과 동시에 NULL로 초..

[CS50] 연결리스트 : 코딩

지난 포스팅에서 연결 리스트의 정의와 리스트의 기본 단위가 되는 구조체를 정의하는 방법에 대해 공부했습니다. 오늘은 이 구조체를 이용해 실제로 연결 리스트를 구현하고 사용해보도록 하겠습니다. 실제로 그림과 같이 리스트에 숫자 2가 저장되어있다고 할때 그림과 같이 숫자 4를 추가하려면 어떻게 해야 할까요? 코드로 작성해보면 node *n = malloc(sizeof(node)); if (n != NULL) { n->number = 4; n->next = NULL; } 이런 식으로 작성해서 4를 넣기 위한 새로운 node를 할당받아야 합니다. 하지만 이렇게 node를 만들기만 한다고 끝나는 것이 아니라 화살표도 연결해줘야 list와 연결된 숫자임을 알 수 있습니다. 어떻게 화살표를 추가해야 할까요? 여기서 ..

[CS50] 배열의 크기 조정하기

컴퓨터의 메모리는 사물함 같은 구조를 가지고 있습니다. 예를 들어 학교에 30개의 사물함이 있다고 하면 전학생이 왔다고 해서 사물함의 개수를 더 늘리거나 30개보다 더 많이 사용할 수는 없습니다. 이 같이 이미 일정한 크기의 메모리가 할당되어 있는 상황에서 그 크기를 늘리기는 쉽지 않습니다. 오늘은 포인터와 malloc의 개념을 응용하여 이미 정의된 배열의 크기를 바꾸는 방법에 대해 공부해보도록 하겠습니다. 배열의 크기를 늘리기 가장 쉬운방법은 이미 배열이 저장된 메모리의 옆에 일정 크기의 메모리를 덧붙이면 되지만 실제로는 다른 데이터가 있을 수 있기 때문에 어렵습니다. 따라서 새로운 공간에 큰 배열을 저장할 수 있는 메모리를 다시 할당하고 기존 배열의 값을 하나씩 옮겨줘야합니다. 이러한 작업은 기존 배..

[CS50] malloc과 포인터 복습

오늘부터는 메모리의 다음 강좌인 자료구조에 대해 공부해보겠습니다. 평소에 공부하던 자바가 아닌 C라 조금 낯설긴 한데 그래도 다양한 데이터 구조를 공부해보는 건 좋은 거 같아요 오늘은 그중에서도 데이터 구조를 정리하는데 중요한 포인터와 메모리에 대한 개념을 한번 더 복습해보겠습니다. 아래와 같이 main 함수를 작성해보겠습니다. int main(void) { int *x; int *y; x = malloc(sizeof(int)); *x = 42; *y = 13; } 이 코드는 문제없이 정상적으로 작동할까요?? 아니라면 어느 부분이 문제가 될까요?? 첫줄에 포인터를 이용해 x, y를 각각 선언해주었습니다. 그다음으로 x에는 malloc 함수를 이용해 int형의 사이즈에 해당하는 메모리를 할당합니다. 그리고..

[CS50] 문자열 복사

지난 포스팅에서 문자열이 메모리에 어떤 방식으로 저장되어있는지, 또 어떻게 불러오고 비교하는지에 대해 공부해봤습니다. 그렇다면 문자열을 다른 곳에 복사할 때는 어떤 방법을 써야 하는지 공부해보도록 하겠습니다. 아래와 같이 문자열이 어떻게 복사가 되는지 보기위해 아래와 같이 문자열을 복사해서 첫 문자를 대문자로 바꾸는 코드를 작성해 보겠습니다. #include #include #include int main(void) { string s = get_string("s: "); string t = s; t[0] = toupper(t[0]); printf("s: %s\n", s); printf("t: %s\n", t); } 처음 입력은 emma로 전부 소문자로 입력한뒤 결과를 봤는데 t뿐 아니라 s까지도 대문자..

CS 기초/메모리 2021.08.22