none
DEBUG ASSERTION FAILED! RRS feed

  • 질문

  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define _CRT_SECURE_NO_WARNINGS

    typedef struct queue_node {
    char data[20];
    struct queue_node *link;
    } queue_node;
    queue_node *front = NULL, *rear = NULL, *new_node = NULL, *ptr = NULL;
    char temp[20];

    void insertQ(char data) {
    new_node = malloc(sizeof(queue_node));
    if (new_node == NULL) {
    printf("memory allocation error\n");
    }
    if (front == NULL)
    {
    front = new_node;
    }

    else
    {
    strcpy_s(new_node->data, sizeof(new_node->data), data);
    rear->link = new_node;
    rear = new_node;
    printf("insertQ된 후 rear의 주소=%d, rear->data = %s\n", rear, rear->data);
    }
    }

    char deleteQ() {

    if (front == NULL)
    {
    rear = NULL;
    printf("queue is NULL");
    }
    else {
    strcpy_s(temp, sizeof(temp), front->data);
    ptr = front;
    front = front->link;
    free(ptr);
    return(temp);
    }

    }

    main() {

    int  suntaek;
    char item = NULL;

    for (;;)
    {
    fflush(stdin);
    printf("\n 1:insertQ  2:deleteQ   3:종료 ...? ");
    scanf_s("%d", &suntaek, sizeof(suntaek));

    switch (suntaek)
    {
    case 1:
    printf("이름...? ");
    scanf_s("%s", item, sizeof(item));
    insertQ(item);
    break;
    case 2:
    item = deleteQ();
    printf("delete후의 front의 값 = %d, delete되어 삭제된 data = %c\n", front, item);

    break;
    case 3:


    return;
    }
    }
    printf("\n 프로그램 종료");
    }

    소스코드는 이러합니다. 1을 입력하고 이름창이뜨면 이름을입력하면 DEBUG ASSERTION FAILED!라는 창이 계속뜹니다..

    왜그럴까요.. 

    2018년 3월 17일 토요일 오전 6:18

답변

  • 먼저 문자와 문자열의 차이에 대한 이해가 선행되어야 할 것 같습니다.

    C언어에서 문자는 char 타입과 'A' 형식의 리터럴을 사용하며 한 개의 문자를 표현합니다.

    반면 문자열 char* 또는 char[] 타입과 "ABC" 형식의 리터럴을 사용하며 0~n개의 길이를 가지는 여러 개의 문자를 표현합니다.

    현재 작성하신 코드에는 문자열이 사용되어야 할 위치에 문자가 사용된 곳이 많이 보입니다.

    (main 함수의 item 변수, insertQ 함수의 data 파라미터 등등)

    이것만 수정한다고 다 해결되는 건 아니지만 먼저 이런 부분들을 수정해보시기 바랍니다.

    2018년 3월 19일 월요일 오전 2:27