Warning: X may be used uninitialized in this function Warning: X may be used uninitialized in this function c c

Warning: X may be used uninitialized in this function


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 = -11free(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.


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};


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.