我使用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;
有人可以帮我吗?
答案 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);