for (int i = 0; i < sizeof(p) / sizeof(struct Person); i++)
for (int i = 0; i < sizeof(p) / sizeof(struct Person)-1; i++)
문의한 코드는 삭제합니다. for 문에 문제가 있습니다.
밑에 있는 창에도 오류나 문제가 표시 되지 않아 무엇이 잘못되었는지 파악 하기가 어렵네요 ㅠㅠ
어떠한것이 실행을 방해시키는지 가르쳐 주실 수 있을까요??
(도장_ 관리자님이 수정함 - 원문 제출일: 2020년 1월 23일, 목요일, 오후 10:49)
말씀하신 53.2를 대조하여 for문에 빠진 부분을 채워놓고 실행 시켜 봤는데 아직도 입력까지만 받고 출력이 되지 않으며 종료가 됩니다. ㅠㅠ
혹시 왜 이런 현상이 발생하는지 조언 가능할까요??
struct_pointer_array.c 예제를 보면...
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D *p[3]; // 크기가 3인 구조체 포인터 배열 선언
// 구조체 포인터 배열 전체 크기에서 요소(구조체 포인터)의 크기로 나눠서 요소 개수를 구함
for (int i = 0; i < sizeof(p) / sizeof(struct Point2D *); i++) // 요소 개수만큼 반복
{
p[i] = malloc(sizeof(struct Point2D)); // 각 요소에 구조체 크기만큼 메모리 할당
}
...
포인터에 대한 이해가 부족한 것 같습니다.
배열의 크기와 관련된 부분에서 대부분 틀렸을 겁니다. 배열에서 틀리면 메모리 접근 오류가 발생합니다.
UNIT 36 배열 사용하기와 UNIT 37 2차원 배열 사용하기에서 배열 크기를 알아내고 반복문을 사용하는 법을 배웁니다.
학습 기록에 따르면 UNIT 22 다음에 UNIT 39로 건너뛴 것으로 나타납니다.
<C 언어 코딩 도장>은 순차 학습을 위해 정교하게 설계되어 있습니다.
이 포럼에 올라오는 질문 중에는 상당수가 순차적으로 학습하지 않고 다 아는 것이라 가정하고 중간부터 보는 분들의 질문이 많습니다.
빨리 가는 것처럼 보이는 길이 실은 가장 느린 길일 수 있습니다.
가장 느려 보이는 길이 가장 빨리 가는 길이기도 합니다.
구멍이 뚫린 치즈와 같이 지식이 쌓여 있으면 결국 기초가 부실하기 때문에 나중에 발전에 장애가 됩니다.
UNIT 6에서 디버거 사용법을 학습하시고, 디버거로 직접 값을 확인하면서 코드의 문제점을 파악하세요.
UNIT 6도 학습 이력에는 없는 것 같습니다. 디버거는 프로그래머의 기본 소양이기 때문에 반드시 익혀야 하고, 코딩 도장에서는 포인터 부분에서 포인터 값을 직접 추적하면서 보여주기 위해 디버거를 사용하고 있습니다. 해당 부분은 동영상 강의에도 충분히 설명되어 있으므로 동영상 강의를 참고해서 실습을 따라 하면서 디버거 사용법도 익히도록 되어 있습니다.
아는 내용은 빠르게 복습한다는 관점에서 순차적으로 학습하세요. 그러지 않으면 뒤로 갈수록 어려워질 겁니다.
UNIT 53.7의 통과율은 77%입니다.
이 문제는 배열의 개수가 정해져 있으니 배열의 개수를 동적으로 구하지 않고 i < 5처럼 숫자를 고정해도 문제를 통과할 수 있을 겁니다.
문제를 통과하지 못한다면 연장자를 구하는 로직이 틀렸을 겁니다.