Warning: X may be used uninitialized in this function

后端 未结 3 1124
悲哀的现实
悲哀的现实 2020-12-23 09:21

I am writing a custom \"vector\" struct. I do not understand why I\'m getting a Warning: \"one\" may be used uninitialized here.

This is my vector.h fil

相关标签:
3条回答
  • 2020-12-23 10:01

    When you use Vector *one you are merely creating a pointer to the structure but there is no memory allocated to it.

    Simply use one = (Vector *)malloc(sizeof(Vector)); to declare memory and instantiate it.

    0 讨论(0)
  • 2020-12-23 10:05

    You get the warning because you did not assign a value to one, which is a pointer. This is undefined behavior.

    You should declare it like this:

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

    or like this:

    Vector one;
    

    in which case you need to replace -> operator with . like this:

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

    Finally, in C99 and later you can use designated initializers:

    Vector one = {
       .a = 12
    ,  .b = 13
    ,  .c = -11
    };
    
    0 讨论(0)
  • 2020-12-23 10:19

    one has not been assigned so points to an unpredictable location. You should either place it on the stack:

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

    or dynamically allocate memory for it:

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

    Note the use of free in this case. In general, you'll need exactly one call to free for each call made to malloc.

    0 讨论(0)
提交回复
热议问题