警告:在此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));
声明内存并实例化它。