액세스 위반이라고 떴는데, 메모리를 선언 안 해준건지 메모리가 넘어선건지...원인을 모르겠습니다.

조회수 558회

액세스 위반이라고 떴는데 원인을 모르겠습니다.

제가 원하는건 학번, 이름, 학과를 입력받고 그걸 이쁘게 나오게 하는 프로그램을 구조체를 리턴하는 방식, 구조체의 포인터를 리턴하는 방식으로 2가지로 뜨게 하려고 했는데 말그대로 액세스 위반이라면서 멈춰버렸습니다. ㅠㅠ

빌드할때는 괜찮은데 디버깅하면 문제가 생깁니다. 도와주세요 ㅠㅠ

메모리 관련 문제일까요?

#include <stdio.h>
#include <string.h>

//////////함수부터 만들었고 본체는 밑에 있습니다.

struct student///////////구조체 선언
{
    int id;
    char name[20];
    char major[20];
};

struct student readStudent1()/////////////구조체를 읽어들여 구조체에 입력하는 함수
{
    struct student stud;

    printf("%s %7s %6s \n", "학번", "이름", "학교");
    if (scanf_s("%d %s %s", &stud.id, &stud.name, &stud.major) == 3)
    {
        return stud;
    }
    else
    {
        printf("입력 오류\n");
    }
}

struct student *readStudent2()/////////////구조체를 읽어들여 구조체 포인터로 입력하는 함수
{
    struct student *s;

    s = (struct student *) malloc(sizeof(struct student));

    printf("%s %7s %6s \n", "학번", "이름", "학과:");

    if (scanf_s("%d %s %s", &s->id, s->name, s->major) == 3)
    {
        return s;
    }
    else
    {
        return NULL;
    }
}

void printStudent1(struct student stud)////////구조체로 출력
{
    printf("+------------------------------------------------------+\n");
    printf("|  학번: %7s 이름: %6s 전공: %8s | \n", stud.id, stud.name, stud.major);
    printf("+------------------------------------------------------+\n");
}

void printStudent2(struct student *s)///////////구조체 포인터로 출력
{
    printf("+------------------------------------------------------+\n");
    printf("|  학번: %7s 이름: %6s 전공: %8s | \n", s->id, s->name, s->major);
    printf("+------------------------------------------------------+\n");
}

int main()//////////////본체
{
    struct student stud, *p;

    stud = readStudent1();
    printStudent1(stud);
    p = readStudent2();
    printStudent2(p);
    return 0;

}

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)