警告:在此function中可以使用未初始化的X.

我正在编写一个自定义的“矢量”结构。 我不明白为什么我会收到Warning: "one" may be used uninitialized在这里Warning: "one" may be used uninitialized

这是我的vector.h文件

 #ifndef VECTOR_H #define VECTOR_H typedef struct Vector{ int a; int b; int c; }Vector; #endif /* VECTOR_ */ 

警告发生在第一行one->a = 12

 #include #include #include #include "vector.h" int main(void){ Vector* one; one->a = 12; one->b = 13; one->c = -11; } 

one尚未被分配,所以指向一个不可预测的位置。 你应该把它放在堆栈上:

 Vector one; one.a = 12; one.b = 13; one.c = -11 

或者为它动态分配内存:

 Vector* one = malloc(sizeof(*one)) one->a = 12; one->b = 13; one->c = -11 free(one); 

注意在这种情况下使用free 。 一般情况下,每次调用malloc都需要一次free调用。

您收到警告,因为您没有为one指定值, one指针。 这是未定义的行为。

你应该这样声明:

 Vector* one = malloc(sizeof(Vector)); 

或者像这样:

 Vector one; 

在这种情况下,你需要替换->运算符. 像这样:

 one.a = 12; one.b = 13; one.c = -11; 

最后,在C99及更高版本中,您可以使用指定的初始值设定项

 Vector one = { .a = 12 , .b = 13 , .c = -11 }; 

当你使用Vector *one你只是创建一个指向结构的指针,但没有分配给它的内存。

只需使用one = (Vector *)malloc(sizeof(Vector)); 声明内存并实例化它。