2-1. MenuItem 구조체 1개 동적 생성 - 이해하기
문제 설명
카페 메뉴 1개를 저장하기 위해 MenuItem 구조체를 Heap 메모리에 생성하려고 한다. malloc()을 사용하여 메뉴 1개를 저장할 메모리를 생성하고, 생성된 메모리의 구조체에 값을 대입하시오.
요구사항
1. MenuItem 1개 공간을 동적 생성하시오.
- menu_id = 101
- name = "Americano"
- price = 3000
- stock = 10
2. -> 연산자를 사용하시오.
3. 사용 후 메모리 해제하시오.
4. [중요] 코드 작성 후 MenuItem * type의 변수와 malloc()을 통해 할당받는 메모리를 그림으로 그려보시오.
참조 코드
아래 참조코드의 주석을 참조하여 코드를 작성하시오.
typedef struct{
int menu_id;
char name[20];
int price;
int stock;
} MenuItem;
int main(void)
{
// 1. 동적할당할 메모리를 가리킬 MenuItem* type의 포인터변수 생성
// 2. malloc()을 이용하여 MenuItem 1개 크기의 동적 메모리 생성
// 3. 구조체의 멤버 menu_id에 101값 대입
// 예) menu_item->menu_id = 101;
// 4. 구조체의 멤버 name에 "Americano" 대입
// 예) strcpy(menu_item->name,"Americano");
// 5. 구조체의 멤버 price에 3000 대입
// 예) menu_item->price=3000;
// 6. 구조체의 멤버 stock 에 10 대입
// menu_item->stock=10;
// 7. 동적할당 받은 구조체 멤버 출력하기
// printf("%d %s %d %d\n", menu_item->menu_id, menu_item->name, menu_item->price, menu_item->stock);
// 8. 메모리 해제하고 포인터 변수 NULL 초기화 하기
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int menu_id;
char name[20];
int price;
int stock;
} MenuItem;
int main(void)
{
// 1. 동적할당할 메모리를 가리킬 MenuItem* 타입 포인터 변수 생성
MenuItem* menu_item;
// 2. MenuItem 1개 크기의 동적 메모리 생성
menu_item = (MenuItem*)malloc(sizeof(MenuItem));
// 메모리 할당 실패 확인
if(menu_item == NULL)
{
printf("메모리 할당 실패\n");
return 1;
}
// 3. menu_id 값 대입
menu_item->menu_id = 101;
// 4. name 값 대입
strcpy(menu_item->name, "Americano");
// 5. price 값 대입
menu_item->price = 3000;
// 6. stock 값 대입
menu_item->stock = 10;
// 7. 구조체 멤버 출력
printf("%d %s %d %d\n",
menu_item->menu_id,
menu_item->name,
menu_item->price,
menu_item->stock);
// 8. 메모리 해제 후 NULL 초기화
free(menu_item);
menu_item = NULL;
return 0;
}
2-2. MenuItem 구조체 10개 동적 생성 및 메뉴 저장
문제 설명
OO 카페 키오스크 시스템은 메뉴 정보를 메모리에 저장하여 관리한다. 프로그램 시작 시 커피 메뉴 10개를 저장할 수 있는 공간을 Heap 메모리에 미리 생성하고, 사용자에게 메뉴 정보를 입력받아 저장하시오. 메뉴가 저장될 때는 현재 등록된 메뉴 개수(menu_count)를 배열의 인덱스로 사용하여 저장한다.
요구사항
1. MenuItem 구조체 10개를 저장할 수 있는 Heap 메모리를 동적 생성하시오.
2. 메뉴 개수를 저장할 변수 menu_count를 선언하고 0으로 초기화하시오.
int menu_count = 0;
3. 생성된 메모리는 배열 형태로 접근하시오.
4. menu_count를 인덱스로 사용하여 메뉴 정보를 입력받아 저장하시오.
- 입력 항목
- 메뉴번호 (menu_id)
- 메뉴명 (name)
- 가격 (price)
- 재고 (stock)
- 입력 예:
메뉴번호 입력: 101
메뉴명 입력: Americano
가격 입력: 3000
재고 입력: 10
- 저장 예:
menu_list[menu_count].menu_id
menu_list[menu_count].name
menu_list[menu_count].price
menu_list[menu_count].stock
5. 입력이 완료되면 menu_count를 1 증가시키시오.
출력 예:
101 Americano 3000 10
7. 사용이 끝난 메모리는 free()를 사용하여 해제하시오.
8. 메모리 해제 후 포인터를 NULL로 초기화하시오.
9. [중요] 코드 작성 후 MenuItem * type의 변수와 malloc()을 통해 할당받는 메모리를 그림으로 그려보시오.
참고 코드
typedef struct{
int menu_id;
char name[20];
int price;
int stock;
} MenuItem;
int main(void)
{
// 1. MenuItem 구조체 배열을 가리킬 포인터 변수 선언
// 2. menu_count 변수 선언 및 0 초기화
// 3. MenuItem 10개 크기의 Heap 메모리 생성
// 4. 메모리 할당 실패 여부 확인
// 5. menu_count를 인덱스로 사용하여 메뉴 정보 입력받기
// 6. 입력 완료 후 menu_count 증가
// 7. 저장된 메뉴 정보 출력
// 8. 메모리 해제하고 포인터 변수 NULL 초기화 하기
return 0;
}
예상코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int menu_id;
char name[20];
int price;
int stock;
} MenuItem;
int main(void)
{
MenuItem* menu_list;
int menu_count = 0;
menu_list = (MenuItem*)malloc(sizeof(MenuItem) * 10);
if(menu_list == NULL)
{
printf("메모리 할당 실패\n");
return 1;
}
printf("메뉴번호 입력: ");
scanf("%d", &menu_list[menu_count].menu_id);
printf("메뉴명 입력: ");
scanf("%s", menu_list[menu_count].name);
printf("가격 입력: ");
scanf("%d", &menu_list[menu_count].price);
printf("재고 입력: ");
scanf("%d", &menu_list[menu_count].stock);
menu_count++;
printf("\n[저장된 메뉴 목록]\n");
for(int i = 0; i < menu_count; i++)
{
printf("%d %s %d %d\n",
menu_list[i].menu_id,
menu_list[i].name,
menu_list[i].price,
menu_list[i].stock);
}
free(menu_list);
menu_list = NULL;
return 0;
}
'[1] 프로그래밍1 및 실습(C언어) > 13주차. 메모리 동적할당' 카테고리의 다른 글
| [13주차][메모리 동적할당] 1단계 연습문제 - 개념 이해 (0) | 2026.05.18 |
|---|




