我正在编写一个自定义的"矢量"结构.我不明白为什么我要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_ */
Run Code Online (Sandbox Code Playgroud)
警告在线发生 one->a = 12
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "vector.h"
int main(void){
Vector* one;
one->a = 12;
one->b = 13;
one->c = -11;
}
Run Code Online (Sandbox Code Playgroud)
sim*_*onc 40
one没有分配,所以指向一个不可预测的位置.你应该把它放在堆栈上:
Vector one;
one.a = 12;
one.b = 13;
one.c = -11
Run Code Online (Sandbox Code Playgroud)
或者为它动态分配内存:
Vector* one = malloc(sizeof(*one))
one->a = 12;
one->b = 13;
one->c = -11
free(one);
Run Code Online (Sandbox Code Playgroud)
请注意free在这种情况下的使用.一般情况下,free每次拨打电话都需要一次通话malloc.
das*_*ght 17
您收到警告,因为您没有为其分配值one,这是一个指针.这是未定义的行为.
你应该这样声明:
Vector* one = malloc(sizeof(Vector));
Run Code Online (Sandbox Code Playgroud)
或者像这样:
Vector one;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你需要像这样替换->运算符.:
one.a = 12;
one.b = 13;
one.c = -11;
Run Code Online (Sandbox Code Playgroud)
最后,在C99及更高版本中,您可以使用指定的初始值设定项:
Vector one = {
.a = 12
, .b = 13
, .c = -11
};
Run Code Online (Sandbox Code Playgroud)
当你使用时,Vector *one你只是创建一个指向结构的指针,但没有分配给它的内存.
只需用于one = (Vector *)malloc(sizeof(Vector));声明内存并实例化它.