53.7 심사문제 질문드립니다
, 방 미넴님이 작성#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> struct Person { char name[30]; int age; }; int main() { struct Person *p[5]; int ans = 0; int count = 0; for (int i = 0; i < sizeof(p)/sizeof(struct Person*); i++) { p[i] = malloc(sizeof(sizeof(struct Person))); } scanf("%s %d %s %d %s %d %s %d %s %d", p[0]->name, &p[0]->age, p[1]->name, &p[1]->age, p[2]->name, &p[2]->age, p[3]->name, &p[3]->age, p[4]->name, &p[4]->age); for (int i = 0; i < sizeof(p) / sizeof(struct Person*); i++) { if (p[i]->age >= ans) { count = i; ans = p[i]->age; } } printf("%s", p[count]->name); for (int i = 0; i < sizeof(p) / sizeof(struct Person *); i++) { free(p[i]); } return 0; }visual studio 에서도 정답은 제대로 나오는데
다음과 같은 에러창이 뜹니다. 이유가 뭘까요 ㅠㅠ? 정답은 나오는데요...
Re: 53.7 심사문제 질문드립니다
, 도장_ 관리자님이 작성잘못된 코드로 우연히 정답이 나오는 경우이기 때문에 심사문제에서는 통과할 수 없습니다.
메모리 오류가 발생했습니다. 당연히 심사를 통과할 수 없습니다.
메모리를 해제하는 부분의 코드는 제시되어 있습니다.
for (int i = 0; i < sizeof(p) / sizeof(struct Person *); i++)잘 보면 이와 같은 공식으로 해제를 하고 있습니다.
포인터 구조체 배열의 개수를 세는 부분을 유심히 보세요.
sizeof(p) / sizeof(struct Person *)
이 산식은 5개를 산출합니다.
메모리를 할당하는 부분은 사용자가 작성하는 부분입니다.
for (int i = 0; i < sizeof(p)/sizeof(struct Person*); i++) { p[i] = malloc(sizeof(sizeof(struct Person))); }for 문에 쓰인 조건은 일치하지만
sizeof(sizeof(struct Person))입니다.
sizeof(struct Person)
이것은 구조체의 크기를 구하지만,
sizeof는 unsigned int 타입으로 숫자를 반환합니다.
sizeof(sizeof(struct Person))이 코드는
sizeof(unsigned int)와 동일합니다.
결과는 숫자 4가 됩니다.
조사식을 이용하면 결과를 알 수 있습니다.