警告:X可能在此功能中未初始化使用

Val*_* Ru 26 c warnings

我正在编写一个自定义的"矢量"结构.我不明白为什么我要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)


pla*_*nas 6

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

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