728x90
반응형
1. 답
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#define PI 3.141592f
#include <inttypes.h>
#include <string.h>
struct Person {
char name[20];
int age;
char address[100];
};
typedef struct {
char name[20];
int number;
int displacement;
} Car;
int main()
{
//답 구간 시작
struct Person* p1 = malloc(sizeof(struct Person));
strcpy(p1->name, "고길동");
p1->age = 40;
strcpy(p1->address, "서울시 서초구 반포동");
Car* c1 = malloc(sizeof(Car));
strcpy(c1->name, "스텔라");
c1->number = 3421;
c1->displacement = 2000;
//답 구간 끝
printf("이름: %s\n", p1->name);
printf("나이: %d\n", p1->age);
printf("주소: %s\n", p1->address);
printf("자동차 이름: %s\n", c1->name);
printf("자동차 번호: %d\n", c1->number);
printf("배기량: %dcc\n", c1->displacement);
free(p1);
free(c1);
return 0;
}
2. 결과
3. 정리
struct Person person;
struct Person* p1;
p1 = &person;
strcpy(p1->name, "고길동");
p1->age = 40;
strcpy(p1->address, "서울시 서초구 반포동");
처음에 작성한 struct 구조체입니다만, 문제에서는 틀린 답이 됩니다. 왜냐하면 밑에 free(p1)가 있으므로 malloc()으로 포인터 메모리 할당이 필요합니다. 위 방식으로 진행하면 메모리 할당을 하지 않았는데 왜 메모리를 해제해? 라면서 오류가 발생할 것으로 생각됩니다.(free(p1)로 메모리 해제가 없었다면 이렇게 진행하여도 문제가 없을 것입니다.)
이 문제의 특징은 일반 구조체와 익명 구조체의 포인터를 활용할 때 동적 메모리를 할당할 수 있느냐? 가 문제의 질문이라고 생각합니다. 일반 구조체의 경우 struct Person* p1 = malloc(sizeof(struct Person));과 같이 struct이 같이 들어가 주는 것이 포인트입니다. 반면 익명 구조체(사용자 지정 구조체, typedef 구조체, 별칭)는 Car* c1 = malloc(sizeof(Car)); 처럼 struct을 제거하여 작성해줍니다. 쉽게 생각하면 typedef를 사용하는 것은 struct이라는 단어의 반복 사용이 번거로워 이를 제거하기 위함도 있으므로 구조체 포인터를 선언할 때에도 struct을 제거한다라고 생각해도 괜찮을 것 같습니다.
4. 비고
- 코딩 도장 심사문제는 아래 링크 바로가기를 눌러주세요. 간단한 가입 진행 후 이용 가능하므로 참고 부탁드립니다.
- 코딩 도장 문제 링크 바로가기 : https://dojang.io/mod/quiz/attempt.php?attempt=1823151&cmid=425
728x90
반응형
댓글