получить другой результат в отладке - PullRequest
0 голосов
/ 02 декабря 2018

У меня небольшая проблема при написании простого кода.когда я использую отладку clion, я получаю " дата: 21/1/1990, а следующая дата -1084227472.32648 "

НО, когда я ставлю точку останова и следую коду в конце, яполучить ПРАВИЛЬНЫЙ ответ aka " дата: 21/1/1990 и следующая дата 22,1 "

typedef struct date_t* Date;
struct date_t{
    int day;
    int month;
    int year;
    Date nextDay;

};

Date dateCreate(int day, int month, int year){
    Date newDate = malloc(sizeof(newDate));
    newDate->day = day;
    newDate->month = month;
    newDate->year = year;
    Date next = malloc(sizeof(*next));
    next->day = day+1;
    next->month = month;
    next->year = year;
    newDate->nextDay = next;

    return newDate;
}

void printDate(Date date){
    printf("the  date is: %d/%d/%d and next date is %d.%d \n", date->day,date->month,date->year, date->nextDay->day,date->nextDay->month);
}

int main() {
    Date d1 = dateCreate(21,01,1990);
    printDate(d1);}

1 Ответ

0 голосов
/ 02 декабря 2018

Добро пожаловать в таинственный мир печально известного Неопределенного поведения.

Здесь

Date next = malloc(sizeof(*next));

Вы делаете это правильно.

Здесь

Date newDate = malloc(sizeof(newDate)); 

Вы не делаете.

Последний должен быть

Date newDate = malloc(sizeof(*newDate)); 
...