程序在t-> time = t0时崩溃;

时间:2015-10-15 03:12:04

标签: c struct

我使用MinGW作为我的c编程环境,但我发现了一个严重的问题。 我的测试代码如下:

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

typedef struct {        /* time struct */
    time_t time;        /* time (s) expressed by standard time_t */
    double sec;         /* fraction of second under 1 s */
} gtime_t;

typedef struct {       
    gtime_t time;        
    int type;         
} raw_t;

int main(){
    raw_t *t;
    gtime_t t0={0};
    t->time = t0;
    printf ("%d",(t->time).time);

    return 0;
}

我定义了两个struct,另一个包含在另一个struct中。当我运行这个测试程序时,它会在线上粉碎

t->time = t0;

有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

t是一个尚未初始化的指针。因此,您无法取消引用它为成员分配值。您可以按堆初始化

t = malloc(sizeof(raw_t));

或按堆栈初始化

raw_t tonthestack;
raw_t *t = &tonthestack;

答案 1 :(得分:1)

您的代码使用未经初始化的指针:

raw_t *t;
t->time = 

在允许您撰写t之前,您必须在t->指向某处。

更简单的解决方案是根本不使用指针:

raw_t t = { 0 };
printf("%d\n", t.time.time);