在调试中得到不同的结果

时间:2018-12-02 15:58:18

标签: c pointers struct clion

在编写简单代码时遇到了一些问题。 当我使用clion debug时,我得到“ 日期是:1990年1月1日,下一个日期是-1084227472.32648

但是当我放置断点并最终遵循代码时,我得到了正确的答案 答案为“ 日期为:1990年1月1日,下一个日期为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 :(得分:2)

欢迎来到臭名昭著的不确定行为的神秘世界。

这里

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

您做对了。

这里

Date newDate = malloc(sizeof(newDate)); 

你不知道。

后者应该是

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